首页 > 编程语言 >算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)

算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)

时间:2022-10-29 19:33:44浏览次数:60  
标签:25 AC ListNode head newHead 链表 节点 翻转


算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)_i++

题目

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

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

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

示例 1:

算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)_入栈_02

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

算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)_数据结构_03

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

提示:
链表中的节点数目为 n
1 <= k <= n <= 5000
0 <= Node.val <= 1000

思路

其实你可以多次翻转看做是一次翻转,反复调用不就行了。
另外k个翻转其实就是选取这个子链然后全部翻转呗。
那么这个问题被拆解后就成了一个最简单的翻转链表题了。
由于是个单链表,翻转链表直接用个栈即可,一次AC ,so easy!

代码

public ListNode reverseKGroup(ListNode head, int k) {
Stack<ListNode> stack = new Stack<>();
ListNode ret = null;
// p用来遍历链表 lastTail作为上一个链表的尾部节点
ListNode p = head, lastTail = null;
// 有节点则执行
while (p != null) {
// 截取一个长度为k的链表放入栈,准备倒转
for (int i = 0; i < k && p != null; i++) {
stack.add(p);
p = p.next;
}
// 凑齐了k个就翻转
if (stack.size() == k) {
// 翻转后子链的头
ListNode newHead = stack.pop();
// 如果之前已经有链翻转过了,那就要把前面链的结尾链接到下一个链的头
if (lastTail != null) {
lastTail.next = newHead;
}
// 子链的头
head = newHead;
// 第一次翻转的头要作为最终返回的头
if (ret == null) {
ret = head;
}
// 开始翻转子链
while (!stack.isEmpty()) {
ListNode pop = stack.pop();
newHead.next = pop;
newHead = pop;
}
// 存好这个子链的尾巴
lastTail = newHead;
// 把这个子链的尾巴链接上后面链的第一个节点
newHead.next = p;
}
}

return ret;
}


标签:25,AC,ListNode,head,newHead,链表,节点,翻转
From: https://blog.51cto.com/humorchen/5806468

相关文章

  • 修复io.minio.errors.ErrorResponseException: Access denied错误
    完整错误如下:io.minio.errors.ErrorResponseException:Accessdeniedatio.minio.MinioClient.execute(MinioClient.java:1135)~[minio-7.1.0.jar!/:7.1.0]......
  • Mac下安装zookeeper
    step1:使用homebrew命令安装(如果卡住在​​brewupdate--preinstall​​​了,直接​​Ctrl+C​​):brewinstallzookeeperstep2:进入bin目录,启动zk服务:cd/usr/local/Cellar/zo......
  • Oracle 12c、18c、19c CDB、PDB常用命令
    一、CDB、PDB常用管理命令查看PDB信息(在CDB模式下)showpdbs--查看所有pdbselectname,open_modefromv$pdbs为PDB信息视图selectcon_id,dbid,guid,name,open_mode......
  • remote: HTTP Basic: Access denied. The provided password or token is incorrect o
    具体错误:$gitpush--set-upstreamoriginquantum6remote:HTTPBasic:Accessdenied.Theprovidedpasswordortokenisincorrectoryouraccounthas2FAenabled......
  • 关于OCA(Oracle Contributor Agreement)的事情
    吾提交代码到jdk8u后,收到一个消息:必须是OCA才能被接受打开链接​​OracleContributorAgreementhttps://oca.opensource.oracle.com/​​选择公司或个人本公司不在列表中 ......
  • golang的interface
    golang的interface0.介绍接口是Go语言提供的数据类型之一,它把所有具有共性的方法(注意与函数区别开)定义在一起,任何其它类型只要一一实现这些方法的话,我们就称这个类型......
  • pikachu sql inject bool盲注
    输入框中输入已知用户名kobe显示了用户信息youruid:3youremailis:kobe@pikachu输入kobe'看一下情况显示您输入的username不存在,请重新输入!这还不能确定是否......
  • [ACTF2020 新生赛]Exec 1
    [ACTF2020新生赛]Exec1下午写了这个,看了别人的解题过程,还是不太能理解。  题目有可能是sql注入,也可能是命令执行漏洞。输入ping127.0.0.1;ls直接显示index.php......
  • Logic Pro X for Mac(专业级音频制作软件)v10.7.4中文无限试用版
    LogicProX中文版是一款专业音频制作软件,作为Mac上功能完备的专业录音室,LogicProX为音乐人提供了从创作第一个音符到完成最后的母带所需的一切。它为您带来的软件乐器......
  • pikachu sql inject header 注入
    使用admin登录显示以下内容朋友,你好,你的信息已经被记录了:点击退出你的ip地址:172.17.0.1你的useragent:Mozilla/5.0(X11;Ubuntu;Linuxx86_64;rv:105.0)Gecko......