leetcode-25-K个一组翻转链表

/**

 * 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 (k == 1) return head;

        if (!head) return NULL;

        ListNode* endNode = head;

        for (int i = 0; i < k; ++i) {

            if (endNode == NULL) return head;

            endNode = endNode->next;

        }

        ListNode* curNode = head;

        ListNode* pre = reverseKGroup(endNode, k);

        while (curNode != endNode) {

            ListNode* next = curNode->next;

            curNode->next = pre;

            pre = curNode;

            if (next == endNode) break;

            curNode = next;

        }

        return curNode;

    }

};

相关文章: