刷题记录第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;
    }
};
相关推荐
再睡一夏就好36 分钟前
【排序算法】④堆排序
c语言·数据结构·c++·笔记·算法·排序算法
再睡一夏就好39 分钟前
【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法
c语言·数据结构·经验分享·学习·算法·排序算法·学习笔记
程序员莫小特41 分钟前
老题新解|求一元二次方程
数据结构·c++·算法·青少年编程·c·信息学奥赛一本通
啊阿狸不会拉杆4 小时前
《算法导论》第 21 章-用于不相交集合的数据结构
数据结构·c++·算法·随机森林
·白小白6 小时前
【数据结构】——顺序表链表(超详细解析!!!)
数据结构·链表
想不明白的过度思考者6 小时前
初识数据结构——优先级队列(堆!堆!堆!)
数据结构
啊阿狸不会拉杆7 小时前
《算法导论》第 18 章 - B 树
数据结构·c++·b树·算法·排序算法
再睡一夏就好7 小时前
【排序算法】⑦归并排序
c语言·数据结构·算法·排序算法·学习笔记
茴香豆的茴116 小时前
转码刷 LeetCode 笔记[2]:203. 移除链表元素(python)
笔记·leetcode·链表
熬了夜的程序员19 小时前
【华为机试】208. 实现 Trie (前缀树)
数据结构·算法·华为od·华为