[LeetCode] 025. Reverse Nodes in k-Group (Hard) (C++/Java),有需要的朋友可以参考下。

索引:

Github:


025. Reverse Nodes in k-Group (Hard)
链接:

题目:

代码(github):

题意:

把一个链表每 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;	}};