[链表]LeetCode 25 K组一个翻转链表
LeetCode 25 k组一个翻转链表
TITLE
示例 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]
示例 3:
输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]
示例 4:
输入:head = [1], k = 1
输出:[1]
(PS:还是加上title吧不然太难受了)
前言:LeetCode难度hard,本体解决为链表分组处理的思想,分组进行链表翻转之后在进行链接,不知道为什么写了两天,秀逗了.
题目分析
首先实现翻转链表的方法此题用‘递归-回溯’的方法比较简单,需要注意的一点是在‘递归-回溯’结束时返回的节点为之前的头节点,所以注意预处理局部链表的头尾指针,并且在一组结束的时候对下一组的头尾指针进行预处理。
- 分组链表
- 初始化头尾指针
- 指针移动记位,当长度为一组进行反转
- 链表之间的链接处理
- 反转后初始化头尾指针
总结。2345循环执行
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:41.4 MB,击败了5.10% 的Java用户
链表反转
private ListNode swapGroup(ListNode head,int k){
if(k == 1){
return head;
}
ListNode next = swapGroup(head.next,k - 1);
head.next = null;
next.next = head;
return head;
}
分组处理链表
public ListNode reverseKGroup(ListNode head, int k) {
int mark = k;
ListNode header = new ListNode();//头节点指针作为答案返回
ListNode pointer_fast = new ListNode();//移动指针
ListNode pointer_slow = new ListNode();//头指针
//指针初始化
header.next = head;
pointer_slow = header;
pointer_fast = header;
//头尾链接处理的中间指针
ListNode pre = new ListNode();
int size = 0;
while(pointer_fast!=null){
if(size == k){
//交换之前预备处理 分组之间的头尾链接预处理数据
pre = pointer_fast.next;
//接收原来分组链表的头节点现在的尾节点
ListNode callBack = swapGroup(pointer_slow.next,k);
//头尾链接处理
callBack.next = pre;
pointer_slow.next = pointer_fast;
//初始化指针处理
pointer_fast = callBack;
pointer_slow = callBack;
size = 0;
}
if(pointer_fast==null)break;
pointer_fast = pointer_fast.next;
size++;
}
return header.next;
}
[链表]LeetCode 25 K组一个翻转链表的更多相关文章
- Java实现 LeetCode 25 K个一组翻转链表
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
- leetcode 25. K 个一组翻转链表
# coding:utf-8 __author__ = "sn" """ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返 ...
- LeetCode 25. K 个一组翻转链表 | Python
25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...
- LeetCode 25 —— K 个一组翻转链表
1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数. 偶数个结点时,结点个数等于 i * 2. 奇数个结点时,结点个数等于 i * 2 + 1. 然后将链表的每 K 个结点划分为一组.循环对 ...
- [LeetCode] 25. k个一组翻转链表
题目链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目描述: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...
- [LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/javadi-gui-fang-fa-100-by-chadriy ...
- LeetCode 25. k个一组翻转链表(Reverse Nodes in k-Group)
题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...
- leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- Leetcode题库——25.k个一组翻转链表
@author: ZZQ @software: PyCharm @file: ReverseList.py @time: 2018/11/6 15:13 题目要求:给出一个链表,每 k 个节点一组进行 ...
随机推荐
- java getSource()和 getActionCommand()区别
感谢大佬:https://blog.csdn.net/LIU_YANZHAO/article/details/72740011?utm_source=blogxgwz1 比如说 按纽的事件,同一个JF ...
- UITabBarController管理原则
- js获取高度
转载请注明来源:https://www.cnblogs.com/hookjc/ <script> function getInfo() { var s = ""; s ...
- 用Dockerfile部署zabbix
用Dockerfile部署 zabbix-server部署阶段 要用docker跑zabbix-server,需要以下几个组件 组件名称 作用 数据库 MySQL或是PostgreSQL Zabbix ...
- 【POJ2942】Knights of the Round Table(二分图 点双联通分量)
题目链接 大意 给定\(N\)个点与\(M\)个关系,每个关系表示某两个点间没有直接的边相连,求不在所有奇环上的点的个数. (\(1\le N\le 1e3,1\le M\le 1e6\)) 思路 考 ...
- 帆软报表(finereport)根据提供的数据求出该日期所在的季度
根据当前日期求字段中日期的季度 Oracle数据库 select T1.INDEXCODE ,T1.CREATETIME ,CASE when T1.CREATETIME = (case when t ...
- Solution -「LOJ #6053」简单的函数
\(\mathcal{Description}\) Link. 积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+) ...
- Solution -「FJWC 2020」人生
\(\mathcal{Description}\) OurOJ. 有 \(n\) 个结点,一些结点有染有黑色或白色,其余待染色.将 \(n\) 个结点染上颜色并连接有向边,求有多少个不同(结点 ...
- uni-app tabBar中间按钮 之 midButton
midButton 中间按钮 仅在 list 项为偶数时有效 , 需要App 2.3.4+.H5 3.0.0+以上版本 midButton 属性说明 属性 类型 必填 默认值 描述 width Str ...
- Java多线程Thread类了解和使用
创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...