这个题是 leetcode 206 反转链表 leetcode 24 2个一组反转链表的结合。在宏观处理上当处理完k个部分的反转后我们需要把之前的部分反转的部分后面的部分三个部分重新连接所以需要类似于24题用dummy node进行处理。但是在反转部分我们需要用到206题的处理方式使用prev, curr, tmp三个节点。在细节处理上具有一定难度需要勤加练习。/** * 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) {} * }; */classSolution{public:ListNode*reverseKGroup(ListNode*head,intk){if(k1)returnhead;ListNode*dummynewListNode();dummy-nexthead;ListNode*pdummy,*ans;while(p){// p后面要有k个元素否则退出ListNode*tmpp;intok1;for(inti0;ik;i){if(!tmp-next){ok0;break;}tmptmp-next;}// printf(%d\n, ok);if(!ok)break;// 反转p后面k个元素ListNode*prevp-next,*currprev-next,*firstprev;for(inti0;ik-1;i){tmpcurr-next;curr-nextprev;prevcurr;currtmp;}// 反转部分和前后的连接处理p-nextprev;first-nextcurr;pfirst;}returndummy-next;}};
leetcode 25 k个一组反转链表,链表超好题
这个题是 leetcode 206 反转链表 leetcode 24 2个一组反转链表的结合。在宏观处理上当处理完k个部分的反转后我们需要把之前的部分反转的部分后面的部分三个部分重新连接所以需要类似于24题用dummy node进行处理。但是在反转部分我们需要用到206题的处理方式使用prev, curr, tmp三个节点。在细节处理上具有一定难度需要勤加练习。/** * 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) {} * }; */classSolution{public:ListNode*reverseKGroup(ListNode*head,intk){if(k1)returnhead;ListNode*dummynewListNode();dummy-nexthead;ListNode*pdummy,*ans;while(p){// p后面要有k个元素否则退出ListNode*tmpp;intok1;for(inti0;ik;i){if(!tmp-next){ok0;break;}tmptmp-next;}// printf(%d\n, ok);if(!ok)break;// 反转p后面k个元素ListNode*prevp-next,*currprev-next,*firstprev;for(inti0;ik-1;i){tmpcurr-next;curr-nextprev;prevcurr;currtmp;}// 反转部分和前后的连接处理p-nextprev;first-nextcurr;pfirst;}returndummy-next;}};