链表]leetcode25:K个一组翻转链表(hard)"/>
[链表]leetcode25:K个一组翻转链表(hard)
题目:
题解:
主要利用了递归的思想,我们将
[a.b)
范围内k个节点的链表翻转,然后a节点就是翻转后链表的尾节点需要链接剩下的链表节点[b,tail)
,注意对于区间范围不足k个节点的,不需要进行翻转。
代码如下:
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {if(head==nullptr)return head;ListNode *a=head,*b=head;for(int i=0;i<k;++i){if(b==nullptr)return head;//[a,b)区间内不足k个元素,不用翻转直接返回headb=b->next;}//newHead表示新链表的头节点ListNode *newHead=reverse(a,b);//a为翻转后链表的尾节点,需要连接剩下需要翻转的链表a->next=reverseKGroup(b,k);return newHead;}//翻转[a,b)区间范围内的链表ListNode* reverse(ListNode* a,ListNode* b){ListNode *pre=nullptr,*cur=a,*nxt=a;while(cur!=b){nxt=cur->next;cur->next=pre;pre=cur;cur=nxt;}return pre;}
};
更多推荐
[链表]leetcode25:K个一组翻转链表(hard)
发布评论