索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)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 nodesListNode *nextgp = head;for (int i = 0; i < k; i++)if (nextgp)nextgp = nextgp->next;elsereturn head;// reverseListNode *prev = NULL, *cur = head, *next = NULL;while (cur != nextgp) {next = cur->next;if (prev)cur->next = prev;elsecur->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 groupwhile (cur != null && cnt != k) {cur = cur.next;cnt++;}if (cnt == k) {cur = reverseKGroup(cur, k);// reversewhile (0 <= –cnt) {ListNode tmp = head.next;head.next = cur;cur = head;head = tmp;}head = cur;}return head;}}
生活会变成什么样子?正因为时光流逝一去不复返,