首页 > 其他分享 >K 个一组翻转链表

K 个一组翻转链表

时间:2024-03-12 22:45:18浏览次数:20  
标签:head ListNode 一组 val int cur next 链表 翻转

题目:

struct ListNode{
    int val;
    ListNode* next;
    ListNode(): val(0), next(nullptr) {}
    ListNode(int _val): val(_val), next(nullptr) {}
    ListNode(int _val, ListNode* _next): val(_val), next(_next) {}
};

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        //先判断是否小于k个节点,小于的话直接返回head(递归终止条件)
        ListNode* p = head;
        for(int i = 0; i < k; i++) {
            if(!p) return head;
            p = p->next;
        }
        //翻转链表
        ListNode* cur = head;
        ListNode* pre = nullptr;
        while(cur!=p){
            ListNode* tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        //head变成最后一个节点,递归指向下一个递归翻转的头结点
        head->next = reverseKGroup(p, k);
        return pre;
    }
};


作者:凉生
链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:head,ListNode,一组,val,int,cur,next,链表,翻转
From: https://www.cnblogs.com/fly-smart/p/18069534

相关文章

  • 力扣148排序链表--复习归并和快速排序
    递归的归并排序归并排序主要流程是拆分--排序--合并--排序--合并//拆分voidmergeSort(vector<int>&nums,intstart,intend){ if(start>=end)return; intmid=start+(end-start)/2; mergeSort(nums,start,mid); mergeSort(nums,mid+1,end); //最后一层排......
  • 数据结构——线性表2(链表)
    【基本知识】链表是一种常见的数据结构,用于存储和组织数据。它由一系列节点组成,每个节点包含两部分:数据(data)和指向下一个节点的指针(*next)。链表中的节点可以在内存中不连续地分布,通过指针将它们连接起来。链表有多种类型,其中最常见的是单向链表和双向链表。在单向链表中,......
  • 链表基础知识详解
    引言在计算机科学中,数据结构是存储、组织数据的方式。而链表,作为一种基础而强大的数据结构,因其独特的特性,在多种算法和应用场景中拥有不可替代的地位。什么是链表,为什么要使用链表链表(LinkedList)是一种线性表,但与数组不同的是,链表中的元素在内存中并不是连续放置的。每......
  • 动态链表学习笔记:查找,插入与删除
    目录情境引入:一、数据的查找1.要求:2.思路:3.程序:4.运行:二、数据的插入 1.要求:2.思路: 3.程序: 4.运行:三、数据的删除1.要求:2.思路:3.程序:4.运行四、调整与小结:优化:运行情境引入:        学习了动态链表的输入输出后,若还需要对其进行进一步的操作,......
  • leetcode160.链表相交
    160.相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结......
  • Leetcode.19. 删除链表的倒数第 N 个结点
    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1] 提示:链表中结点的数目为 sz1<=sz<=300<=Node.val<=100......
  • “c语言+结构体+链表”实现名片系统
    //名片系统//第一步:创建名片姓名:年龄:(23)手机号:(默认为171****3422)地址:河南洛阳// 公司:tzh职务:学员//输出名片信息////第二步:删除已存在的名片////第三步:修改信息#可指定修改内容////第四步:查询信息#可查询相关姓名对应的信......
  • 86 单链表的分解
    你说你会改变,但是你只是为了解决当时的冲突而讲的话。给你一个链表头节点head和x,要求链表中所有小于x的节点都出现在大于或等于x的节点之前例如:head=[1,4,3,2,5,2],x=3;输出:[1,2,2,4,3,5]在合并两个链表的时候,是将两个链表合并成一个,拆分的时候,是将一个链表拆分成两个。......
  • 第四节:链表相关(删除倒数第N节点、相邻位置交换)
    一.删除倒数第N个节点一.题目描述  给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。  示例:  leetcode地址:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/  难度:【中等】二.思路分析   (经典的链......
  • 【算法】【线性表】【链表】合并 K 个升序链表
    1 题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1-......