【链表】节点的插入删除【25. Reverse Nodes in k-Group】

来源:互联网 发布:网页设计什么软件 编辑:程序博客网 时间:2024/06/14 07:27

题目链接:https://leetcode.com/problems/reverse-nodes-in-k-group/#/description

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    //   -1 ->  2  ->  1  ->  3  ->  4    //   pre          cur    nxt     t    //  将nxt节点插入在pre和2中间    ListNode* reverseKGroup(ListNode* head, int k) {        if(head==NULL||k==1) return head;        //  将head链表改为带头节点的链表        ListNode* tmp = new ListNode(-1);        tmp->next=head;        //  参数:pre:前驱,cur:当前节点,nxt:后继        ListNode* pre=tmp,*cur=tmp,*nxt;        //  统计head链表中节点个数        int num=0;        while(cur=cur->next) num++;        //  做num/k次移位循环        while(k<=num){            cur=pre->next;            nxt=cur->next;            //  每一段数据做k-1次插入            for(int i=1;i<k;i++){                cur->next=nxt->next;                nxt->next=pre->next;                pre->next=nxt;                nxt=cur->next;            }            num-=k;            pre=cur;        }        //  返回不带头节点的链表        return tmp->next;    }};


原创粉丝点击