Leetcode025 K个一组翻转链表(024两两交换链表节点升级版)

地址

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/

描述

在这里插入图片描述

思想

请添加图片描述

代码

/**
 * 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) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
    
    
        auto dummy=new ListNode (-1);
        dummy->next=head;
        for(auto p=dummy;;){
    
    
            //判断有没有k个节点如果没有就break
            auto q=p;
            for(int i=0;i<k&&q;i++) q=q->next;
            if(!q) break;
            auto a=p->next,b=a->next;
           //第一步,将k个节点进行内部翻转
           for(int i=0;i<k-1;i++){
    
    
               auto c=b->next;
               b->next=a;
               a=b;
               b=c;
           }
           //第二步,dummy->next=3
            auto c=p->next;
            p->next=a;
            //第三步,1->next=4
            c->next=b;
            p=c;
        }
        return dummy->next;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121364627
今日推荐