Hot100】LeetCode—25. K 个一组翻转链表

server/2024/9/23 19:49:03/

目录

  • 1- 思路
    • 双指针 start 和 end + 链表翻转
  • 2- 实现
    • ⭐25. K 个一组翻转链表——题解思路
  • 3- ACM 实现


  • 原题连接:25. K 个一组翻转链表

1- 思路

双指针 start 和 end + 链表翻转

实现思路:

  • 1- 通过 pre指针和 end 指针定位,
    • pre 记录需要翻转的链表的头
    • end 根据 k 和当前 end 不为 null 进行循环遍历
  • 2- 得到 end 之后 进行拆链,拆头和尾
    • 尾:记录下一个起始点
    • 头:拆掉的结点,让它为 null
  • 3- 进行翻转
    • 翻转后更新 prenext,更新 preend

2- 实现

⭐25. K 个一组翻转链表——题解思路

在这里插入图片描述

class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummyHead = new ListNode(-1);dummyHead.next = head;// 链表头 和 尾ListNode pre = dummyHead;ListNode end = dummyHead;while(end.next!=null){// 定位 endfor(int i = 0;i<k&& end!=null;i++){end = end.next;}if(end==null){break;}// 断链逻辑ListNode tmp = end.next;ListNode start = pre.next;pre.next = null;end.next = null;pre.next = reverseL(start);start.next = tmp;// 更新pre = start;end = start;}return dummyHead.next;}public ListNode reverseL(ListNode head){if(head==null || head.next==null){return head;}ListNode cur = reverseL(head.next);head.next.next = head;head.next = null;return cur;}
}

3- ACM 实现

public class reverseKGroup {public static class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public static ListNode reverseK(ListNode head,int k){ListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode pre = dummyHead;ListNode end = dummyHead;// 2. 遍历// 2.1 遍历条件while(end.next!=null){//2.2定位endfor(int i = 0 ; i < k && end!=null;i++){end = end.next;}if(end == null){break;}// 2.3 断链+翻转ListNode tmp = end.next;ListNode start = pre.next;pre.next = null;end.next = null;pre.next = reverseL(start);start.next = tmp;pre = start;end = start;}return dummyHead.next;}public static ListNode reverseL(ListNode head){if(head==null || head.next==null){return head;}ListNode cur = reverseL(head.next);head.next.next = head;head.next = null;return cur;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);
// 读取第一个链表的节点数量int n1 = sc.nextInt();ListNode head1 = null, tail1 = null;for (int i = 0; i < n1; i++) {int val = sc.nextInt();ListNode newNode = new ListNode(val);if (head1 == null) {head1 = newNode;tail1 = newNode;} else {tail1.next = newNode;tail1 = newNode;}}System.out.println("输入k");int k = sc.nextInt();ListNode forRes = reverseK(head1,k);while(forRes!=null){System.out.print(forRes.val+" ");forRes = forRes.next;}}
}

http://www.ppmy.cn/server/105800.html

相关文章

设计模式-创建型模式-原型模式

1.原型模式定义 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象&#xff1b; 1.1 原型模式优缺点 优点 当创建一个新的对象实例较为复杂时&#xff0c;使用原型模式可以简化对象的创建过程&#xff0c;通过复制一个已有的实例…

Agent实际落地的应用 未来生活的无形助手

在这个信息爆炸的时代&#xff0c;我们每个人都在追求更高效的生活方式。想象一下&#xff0c;如果有一个无形的助手&#xff0c;能够理解我们的需求&#xff0c;自动处理繁琐的任务&#xff0c;甚至为我们提供个性化的建议&#xff0c;那将是多么美好的体验&#xff01;这正是…

Flask返回Json格式字符,中文导致unicode乱码问题

一.问题描述 或者直接返回json格式的字符串 从上图可以看出&#xff0c;当flask实现的接口响应中存在中文时&#xff0c;接口返回json字串的中文为unicode乱码。 二.问题解决 百度搜索了很多&#xff0c;原来在创建flask app时使用json格式的字符串&#xff0c;默认是ascii编…

每天一个数据分析题(四百八十九)- 主成分分析与因子分析

关于主成分分析和因子分析的区别&#xff0c;下列描述正确的是&#xff08; &#xff09; A. 主成分分析是一种无监督学习算法&#xff0c;而因子分析是一种有监督学习算法 B. 主成分分析是一种线性变换方法&#xff0c;而因子分析是一种非线性变换方法 C. 主成分分析的结果…

m4a格式音频怎么转成mp3?音频转成mp3的8个方法

在结束关于M4A转MP3格式转换的探讨之际&#xff0c;我们不得不强调这一转换过程对于提升音频文件灵活性和可访问性的重要意义。随着数字媒体的日益普及&#xff0c;音频文件的格式兼容性成为了不可忽视的一环。特别是在一个多元化设备和平台共存的数字时代&#xff0c;确保音频…

搭建自己的GPT

搭建自己的GPT 文章说明核心代码效果展示源码下载 文章说明 目前GPT的使用比较主流&#xff0c;现有开源大模型&#xff0c;可以拉取到本地进行部署&#xff0c;搭建属于自己的GPT对话工具&#xff1b;主要用于熟悉大模型的本地搭建&#xff1b;本文采用开源的Ollama进行服务提…

【Material-UI】深入了解Radio Group中的useRadioGroup Hook

文章目录 一、什么是useRadioGroup&#xff1f;1.1 Hook的返回值 二、useRadioGroup的基本用法2.1 代码示例2.2 代码解析 三、useRadioGroup的应用场景3.1 动态样式调整3.2 高级交互逻辑 四、使用useRadioGroup的最佳实践4.1 保持代码简洁4.2 结合主题定制4.3 注意无障碍设计 五…

Java—Arrays api

public static String toString(数组) //把数组拼接成一个字符串 public static int binarySearch(数组&#xff0c;查找的元素) //二分查找法查找元素 public static int[] copyOf(原数组,新数组长度) //拷贝数组 public st…