国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > [LeetCode] 025. Reverse Nodes in k-Group (Hard) (C++/Java)

[LeetCode] 025. Reverse Nodes in k-Group (Hard) (C++/Java)

来源:程序员人生   发布时间:2015-03-14 10:01:02 阅读次数:3073次

索引:[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

题意

把1个链表每 k 个分为1组,每组内进行翻转。
只能用常数级的空间。

分析

这题比较考验链表的操作,用递归做会比较方便,先找到下1组的节点,把本组反转后再递归处理后面的节点。

代码

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; } }


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生