• 【LeetCode 25】K 个一组翻转链表


    题目链接

    【题解】

    模拟就好。 就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;
        }
    };
    
  • 相关阅读:
    【今日CS 视觉论文速览】Mon, 7 Jan 2019
    文章汇总页面
    【MarkDown】转义字符
    hdu 4678 Mine 博弈论
    hdu 4294 Multiple
    hdu 4291 A Short problem
    hdu 4672 Present Day, Present Time 博弈论
    hdu 3544 Alice's Game 博弈论
    hdu 3389 Game 博弈论
    hdu 2147 kiki's game 博弈论
  • 原文地址:https://www.cnblogs.com/AWCXV/p/11827243.html
Copyright © 2020-2023  润新知