LeetCode——25.K 个一组翻转链表(困难)

Posted nirvana · rebirth

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode——25.K 个一组翻转链表(困难)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述


题解

  • 搞个头节点,直接每k个翻转即可

AC-Code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    pair<ListNode*, ListNode*> reverseG(ListNode* head, ListNode* tail) {
        ListNode* pre = tail->next; // 翻转之后末尾连接完成,只有头部没有连接
        ListNode* p = head;
        while(pre != tail) {
            ListNode* nex = p->next;
            p->next = pre;
            pre = p;
            p = nex;
        }
        return {tail, head};
    }

    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode* hair = new ListNode(0, head);
        ListNode* pre = hair;

        while(head) {
            ListNode* tail = head;
            for(int i = 0; i < k - 1 ; ++i) {
                tail = tail->next;
                if(!tail) {
                    return hair->next;
                }
            }
        //    ListNode* nex = tail->next;
            tie(head, tail) = reverseG(head, tail);
            pre->next = head;
        //    tail->next = nex; // reverseG已经连接了尾部
        
            pre = tail;
            head = tail->next;
        }
        
        {
        	ListNode* ans = hair->next;
        	delete hair; // hair是new出来的,理应释放
        }
        
        return ans;
    }
};

以上是关于LeetCode——25.K 个一组翻转链表(困难)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode25. K 个一组翻转链表---python

leetcode25. K 个一组翻转链表---python

leetcode25. K 个一组翻转链表---python

LeetCode Java刷题笔记—25. K 个一组翻转链表

25. K 个一组翻转链表

leetCode 25 K个一组翻转链表