当前位置: 首页 > news >正文

面试热题(翻转k个链表)

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

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

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

       对链表进行k个节点的反转,首先我们要先知道链表的节点个数有多少个?才能知道我们需要翻转多少次?最后不够的节点是不需要翻转的

        int n=0;ListNode cur=head;//计算出列表的长度while(cur!=null){n++;cur=cur.next;}

为了使head节点不具有特殊性,我们经常会在head节点前加一个虚拟头结点dummyHead

 过程如下:

 序号12345的代码:

  for (int i =0; i <k; i++) {ListNode next=curNode.next;curNode.next=pre;pre=curNode;curNode=next;}

序号67的代码:

           ListNode next=p0.next;p0.next.next=curNode;p0.next=pre;p0=next;

       通过while的循环,就可以将k个节点进行反转,多指针这种方法也是比较好想的,但是就是比较容易绕,希望大家可以看着我画的图进行理解

源代码:

 public ListNode reverseKGroup(ListNode head, int k) {if(head==null){return null;}int n=0;ListNode cur=head;//计算出列表的长度while(cur!=null){n++;cur=cur.next;}ListNode dummyNode=new ListNode(-1);dummyNode.next=head;ListNode pre=null;ListNode p0=dummyNode;ListNode curNode=p0.next;while(n>=k){n-=k;for (int i =0; i <k; i++) {ListNode next=curNode.next;curNode.next=pre;pre=curNode;curNode=next;}ListNode next=p0.next;p0.next.next=curNode;p0.next=pre;p0=next;}return dummyNode.next;}

下面给大家递归的代码,供大家借鉴:

   //递归反转public ListNode reverseKGroup(ListNode head, int k) {if(head==null||head.next==null){return head;}ListNode r=head;for (int i = 0; i <k; i++) {if(r==null){return head;}r=r.next;}ListNode node=reverse(head,r);head.next=reverseKGroup(r,k);return node;}//给定区间链表进行反转public ListNode reverse(ListNode head,ListNode right){ListNode pre=null,curNode=head,next=null;while(curNode!=right){next=curNode.next;curNode.next=pre;pre=curNode;curNode=next;}return pre;}

http://www.lryc.cn/news/115862.html

相关文章:

  • 前端面试的性能优化部分(4)每天10个小知识点
  • el-checkbox修改选中和未选中的值
  • 完整版:TCP、UDP报文格式
  • 如何远程连接云服务器oracle数据库
  • “深入剖析JVM内部机制:探秘Java虚拟机的运行原理“
  • 尚品汇总结十:秒杀模块(面试专用)
  • 什么是设计模式?
  • Node.js |(三)Node.js API:path模块及Node.js 模块化 | 尚硅谷2023版Node.js零基础视频教程
  • Netty自定义编码解码器
  • HOperatorSet.OpenFramegrabber “GigEVision“
  • 图的遍历DFSBFS-有向图无向图
  • 【NLP】深入浅出全面回顾注意力机制
  • Linux应用编程的read函数和Linux驱动编程的read函数的区别
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群
  • 使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选
  • 大规模向量检索库Faiss学习总结记录
  • SpringCloudAlibaba之Sentinel(一)流控篇
  • 哪种模式ip更适合你的爬虫项目?
  • 优维低代码实践:对接数据
  • docker 离线模式-部署容器
  • MDN-HTTP
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
  • 笔记本WIFI连接无网络【实测有效,不用重启电脑】
  • Java课题笔记~ Spring 概述
  • 2022 robocom 世界机器人开发者大赛-本科组(国赛)
  • 【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块6
  • Typescript]基础篇之 tsc 命令解析
  • 测试人员简单使用Jenkins
  • 使用RecyclerView构建灵活的列表界面
  • linux ubuntu安装mysql