[LeetCode] 025. Reverse Nodes in k-Group (Hard) (C++/Java)
2015-03-05 15:04
363 查看
索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode
代码(github):https://github.com/illuz/leetcode
只能用常数级的空间。
Java:
Github: https://github.com/illuz/leetcode
025. Reverse Nodes in k-Group (Hard)
链接:
题目:https://oj.leetcode.com/problems/reverse-nodes-in-k-group/代码(github):https://github.com/illuz/leetcode
题意:
把一个链表每 k 个分为一组,每组内进行翻转。只能用常数级的空间。
分析:
这题比较考验链表的操作,用递归做会比较方便,先找到下一组的节点,把本组反转后再递归处理后面的节点。代码:
C++:class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { if (!head || !(head->next) || k < 2) return head; // count k nodes ListNode *nextgp = head; for (int i = 0; i < k; i++) if (nextgp) nextgp = nextgp->next; else return head; // reverse ListNode *prev = NULL, *cur = head, *next = NULL; while (cur != nextgp) { next = cur->next; if (prev) cur->next = prev; else cur->next = reverseKGroup(nextgp, k); prev = cur; cur = next; } return prev; } };
Java:
public class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode cur = head; int cnt = 0; // get next group while (cur != null && cnt != k) { cur = cur.next; cnt++; } if (cnt == k) { cur = reverseKGroup(cur, k); // reverse while (0 <= --cnt) { ListNode tmp = head.next; head.next = cur; cur = head; head = tmp; } head = cur; } return head; } }
相关文章推荐
- [LeetCode] 010. Regular Expression Matching (Hard) (C++/Java/Python)
- [LeetCode] 030. Substring with Concatenation of All Words (Hard) (C++/Java)
- [LeetCode] 004. Median of Two Sorted Arrays (Hard) (C++/Java/Python)
- [LeetCode] 023. Merge k Sorted Lists (Hard) (C++/Java/Python)
- LeetCode 61 — Rotate List(C++ Java Python)
- LeetCode 63 — Unique Paths II(C++ Java Python)
- LeetCode 8 — String to Integer (atoi)(C++ Java Python)
- LeetCode 19 — Remove Nth Node From End of List(C++ Java Python)
- LeetCode 3 — Longest Substring Without Repeating Characters (C++ Java Python)
- LeetCode 150 — Evaluate Reverse Polish Notation(C++ Java Python)
- LeetCode 53 — Maximum Subarray(C++ Java Python)
- LeetCode 4 — Median of Two Sorted Arrays (C++ Java Python)
- LeetCode 148 — Sort List(C++ Java Python)
- LeetCode 141 — Linked List Cycle(C++ Java Python)
- LeetCode 142 — Linked List Cycle II(C++ Java Python)
- LeetCode 67 — Add Binary(C++ Java Python)
- LeetCode 7 — Reverse Integer(C++ Java Python)
- LeetCode 1 — Two Sum(C++ Java Python)
- LeetCode 27 — Remove Element(C++ Java Python)
- LeetCode 64 — Minimum Path Sum(C++ Java Python)