leetcode 25. Reverse Nodes in k-Group
题目
就是每k个节点进行一次反转,然后不够的话,就不转了
题解
比如当前是1->2->3->4->5 k = 2
, 然后我递归 找3->4->5
然后递归 5
发现5不够k=2,然后直接返回
然后我反转 3->4 5 反转结果为 4->3->5
然后我再返回
反转 1->2 4->3->5
然后结果就是2->1->4->3->5
了
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(head == NULL || head->next == NULL) return head;
// 先找到第k个节点
int cnt = 0;
ListNode *cur = head;
while(cur != NULL && cnt != k) {
cur = cur->next;
cnt ++;
}
// 比如我 1->2->3->4->5 k = 2
// 那么我现在已经到3了 我对3这里进行反转
if(cnt == k) {
cur = reverseKGroup(cur, k);
while(cnt -- > 0) {
ListNode* headNext = head->next;
head->next=cur;
cur = head;
head = headNext;
}
return cur;
}
return head;
}
};