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;
    }
};
posted @ 2019-08-10 15:40  Draymonder  阅读(106)  评论(0编辑  收藏  举报