首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:K 个一组翻转链表

#yyds干货盘点# LeetCode程序员面试金典:K 个一组翻转链表

时间:2023-04-14 23:33:38浏览次数:48  
标签:yyds head ListNode 金典 next 链表 tail hair

题目:

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

 

示例 1:

输入:head = [1,2,3,4,5], k = 2

输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3

输出:[3,2,1,4,5]

代码实现:

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode hair = new ListNode(0);
        hair.next = head;
        ListNode pre = hair;

        while (head != null) {
            ListNode tail = pre;
            // 查看剩余部分长度是否大于等于 k
            for (int i = 0; i < k; ++i) {
                tail = tail.next;
                if (tail == null) {
                    return hair.next;
                }
            }
            ListNode nex = tail.next;
            ListNode[] reverse = myReverse(head, tail);
            head = reverse[0];
            tail = reverse[1];
            // 把子链表重新接回原链表
            pre.next = head;
            tail.next = nex;
            pre = tail;
            head = tail.next;
        }

        return hair.next;
    }

    public ListNode[] myReverse(ListNode head, ListNode tail) {
        ListNode prev = tail.next;
        ListNode p = head;
        while (prev != tail) {
            ListNode nex = p.next;
            p.next = prev;
            prev = p;
            p = nex;
        }
        return new ListNode[]{tail, head};
    }
}

标签:yyds,head,ListNode,金典,next,链表,tail,hair
From: https://blog.51cto.com/u_13321676/6191152

相关文章

  • #yyds干货盘点# LeetCode面试题:最小覆盖子串
    1.简述:给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。 注意:对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。如果s中存在这样的子串,我们保证它是唯一的答案。......
  • 程序员面试金典---5
    零矩阵思路:设置两个列表记录哪里需要置零,然后对其改变即可classSolution:defsetZeroes(self,matrix:List[List[int]])->None:"""Donotreturnanything,modifymatrixin-placeinstead."""n,m=len(matrix),len(matrix[0])......
  • 23-4-14--链表--银行排队问题之单队列多窗口服务
    假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统......
  • EF 多个链表查询
      查询格式如下:varresult=(frompinPackagejoinqinPackageLocationPricesonp.Idequalsq.PackageIdintopqfromrinpq.DefaultIfEmpty()selectnew{p,r}).ToList(); ......
  • 链表
    概述链表是一种通过指针串联在一起的线性结构链表在内存中的存储形式链表中的节点在内存中不是连续分布的,而是散乱分布在内存中的某地址上链表有节点组成,每个节点又分成两个部分:1)数据域(data)2)指针域数据域:存放数据指针域:存放指针,指向节点头节点(head)......
  • #yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-.NET Core使用PaddleOCRSha
    (文章目录)前言PaddleOCRSharp是一个基于百度飞桨PaddleOCR的C++代码修改并封装的.NET的OCR工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同时针对小图识别不准的情况下,做了优化,提高识别准确率。包含总模型仅8.6M的超轻量级中文OCR,单模型支持中......
  • #yyds干货盘点#Git 技巧之高级配置用户信息
    众所周知,日常配置git用户信息的方式通常是:gitconfig--globaluser.name'用户名'gitconfig--globaluser.email'邮箱'全局方式配置,写入到 ~/.gitconfig文件中,这种方式显然只能设置最常用通用的用户信息,然后在需要部分仓库(如公司项目)需要特殊配置时,只能再通过下面的方式配置......
  • 程序员面试金典---4
    字符串压缩思路:使用双指针进行模拟即可classSolution:defcompressString(self,S:str)->str:res=[]#i:左指针,j:右指针i,j,ls=0,0,len(S)whilei<ls:#记数当前字符的连续个数whilej<ls......
  • #yyds干货盘点#Linux CPU 的上下文切换一
    我们都知道Linux是一个多任务操作系统,它支持的任务同时运行的数量远远大于CPU的数量。当然,这些任务实际上并不是同时运行的(SingleCPU),而是因为系统在短时间内将CPU轮流分配给任务,造成了多个任务同时运行的假象。CPU上下文(CPUContext)在每个任务运行之前,CPU需要知道在哪里加......
  • #yyds干货盘点# LeetCode程序员面试金典:两两交换链表中的节点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]代码实现:classSolution{publicListN......