LeetCode - Reverse Nodes in k-Group
2015-12-21 04:38
537 查看
题目:
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is. You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
思路:
没啥思路,就是指针交换
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is. You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
思路:
没啥思路,就是指针交换
package list; public class ReverseNodesInKGroup { public ListNode reverseKGroup(ListNode head, int k) { if (head == null || k < 2) return head; ListNode first = new ListNode(0); first.next = head; ListNode prevp = first; ListNode p = head; ListNode q = p; while (q != null) { int i = 0; for (; q != null && i < k - 1; ++i) { q = q.next; } if (i == k - 1 && q != null) { ListNode qNext = q.next; q.next = null; ListNode newHead = reverseList(p); prevp.next = newHead; prevp = p; p = qNext; q = qNext; prevp.next = qNext; } } return first.next; } // This function will only be invoked when the list contains more than one node. private ListNode reverseList(ListNode head) { ListNode prevp = null; ListNode p = head; ListNode q = head.next; while (p != null && q != null) { ListNode tmp = q.next; q.next = p; p.next = prevp; prevp = p; p = q; q = tmp; } return p; } public static void main(String[] args) { // TODO Auto-generated method stub ListNode a1 = new ListNode(1); ListNode a2 = new ListNode(2); ListNode a3 = new ListNode(3); ListNode a4 = new ListNode(4); ListNode a5 = new ListNode(5); a1.next = a2; a2.next = a3; a3.next = a4; a4.next = a5; a5.next = null; ReverseNodesInKGroup r = new ReverseNodesInKGroup(); ListNode x = r.reverseKGroup(a1, 3); while (x != null) { System.out.println(x.val); x = x.next; } } }
相关文章推荐
- LeetCode - Swap Nodes in Pairs
- *LeetCode Remove Nth Node From End of List 双指针
- 深入浅析NodeJs并发异步的回调处理
- leetcode25---Reverse Nodes in k-Group
- hadoop2.6分布式部署时 livenodes等于1的原因
- NodeJs并发异步的回调处理
- 再撸一次简单的NODE.JS
- Node.js转化GBK编码 - iconv-lite
- node jade学习笔记
- Node.js实现的指定目录xml文件标签对去除及转换为txt文本文件
- 使用supervisor提高nodejs调试效率
- WebStorm,Chrome,Nodejs实现Angularjs所见即所得
- 深入浅析Node.js 事件循环
- LeetCode 019 Remove Nth Node From End of List
- HDFS DATANODE 磁盘容量的最小值
- [LeetCode]Populating Next Right Pointers in Each Node
- Leetcode: Delete Node in a Linked List
- LeetCode - Remove Nth Node From End of List
- VS 2008 也能玩转 Node.JS!
- 237. Delete Node in a Linked List