LeetCode 25K 个一组翻转链表

Posted Visitor

tags:

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

题目链接

【题解】


模拟就好。
就k个k个节点地翻转。
每个节点都把next域指向它前面那个节点
修改完之后把这个节点前面的那个节点的next域改成这一段的最后一个节点。
然后把这一段最左边的那个节点的next域修改为下一个区间的开始位置。

【代码】

/**
 * 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) {
        ListNode *thead = new ListNode(0);
        thead->next = head;
        ListNode *temp = thead;
        int len = 0;
        while (temp->next!=NULL){
            temp = temp->next;
            len++;
        }
        temp = thead;
        for (int i = 1;i <= len/k;i++){
            ListNode *pre = temp;
            ListNode *p = temp,*tp = temp->next;//tp保存修改到的节点的next,因为next会变了
            for (int j = 1;j <= k;j++){
                p = tp;
                tp = p->next;
                p->next = pre;//把当前节点的next域指向前面一个节点
                pre = p;//保存pre节点。
            }
            temp->next->next=tp;//要修改的这段的最左边的节点next域改一下
            ListNode *t2 = temp->next;
            temp->next = pre;//这段要修改的区间的最左边的左边一个节点的next域指向这一段的最右边那个节点
            temp = t2;//指向这一段"新的最右边的节点"(也即原来的第一个节点)
        }
        return thead->next;
    }
};

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

25. k个一组翻转链表-LeetCode

链表--K个一组反转链表(leetcode 25

LeetCode:K个一组翻转链表(链表问题)

LeetCode-025-K 个一组翻转链表

LeetCode K个一组翻转链表

LeetCode 25. K 个一组翻转链表 | Python