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

前端之家收集整理的这篇文章主要介绍了[LeetCode] 025. Reverse Nodes in k-Group (Hard) (C++/Java)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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


猜你在找的PHP相关文章