刷题记录第109天-K个一组反转链表

解题思路:

第一步:实现一个数组,给定一段链表的头结点和尾节点,反转该链表,并返回新的头结点和尾结点。

第二步:初始化一个虚拟头结点,用于记录最终头结点和规范操作。

第三步:给定一个初始头结点head,先走k步得到尾结点tail,如果走不到,则证明剩下的不足K哥啊,可直接return。否则,就调用第一步的函数反转此时的[head,tail]之间的链表,并将这个链表接回到原始链表中(这里需要记录每组链表头结点的前一个节点prev),重复该操作,直到head为空。

cpp 复制代码
class Solution {
public:
    // 翻转一个子链表,并且返回新的头与尾
    pair<ListNode*,ListNode*> reverse(ListNode* head,ListNode* tail){
        ListNode* prev=tail->next;
        ListNode* cur_p=head;
        while(prev!=tail){
            ListNode* next = cur_p->next;
            cur_p->next = prev;
            prev = cur_p;
            cur_p = next;
        }
        return {tail,head};
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* prev = dummy;
        while(head!=nullptr){
            ListNode* tail=prev;
            for(int i=0;i<k;i++){
                tail = tail->next;
                if(tail==nullptr){
                    return dummy->next;
                }
            }
            pair<ListNode*,ListNode*> result = reverse(head,tail);
            head = result.first;
            tail = result.second;
            prev->next=head;
            prev=tail;
            head=tail->next;
        }
        return dummy->next;
    }
};
相关推荐
daiyang123...1 小时前
测试岗位应该学什么
数据结构
kitesxian1 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
薯条不要番茄酱3 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
盼海5 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
‘’林花谢了春红‘’10 小时前
C++ list (链表)容器
c++·链表·list
搬砖的小码农_Sky11 小时前
C语言:数组
c语言·数据结构
先鱼鲨生13 小时前
数据结构——栈、队列
数据结构
一念之坤13 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
IT 青年13 小时前
数据结构 (1)基本概念和术语
数据结构·算法
熬夜学编程的小王13 小时前
【初阶数据结构篇】双向链表的实现(赋源码)
数据结构·c++·链表·双向链表