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

『力扣刷题本』:链表分割

一、题目

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

二、思路解析

首先,让我们列出我们需要做的事情:

  1. 遍历整个链表;
  2. 对于值小于x的节点,把它们暂时存储起来,并从原链表中删除「删除是为了等下重新插入的时候,不造成元素重复的情况」;
  3. 最后,我们要把这些节点重新插入到链表的头部。

Sounds simple, right? 

Step 1: 选择好用什么结构来存储值小于 x 的元素

这里我采用的是题解区中一位大佬的解法,他是用栈来存储那些待会要头插于链表的、值小于 x 的元素的。

我们首先定义一个栈来存储所有小于x的节点的值。

如果你对栈不熟悉,没关系,想象一下你在吃饭时堆放碗筷的样子,最后放上去的碗筷总是最先被取走,栈就是这样工作的。

Step 2: 遍历链表

 遍历过程,如果我们遇到一个值小于x的节点,我们就把它的值压入栈中,并从原链表中删除这个节点。

如何删除节点,只需要把它前面节点的 next 指针指向它的下一个节点即可。

Step 3: 把栈中元素用头插法,插入链表

在我们遍历完链表后,所有小于x的节点都已经被保存在了栈中,而由于栈的先进后出特性,我们可以保证最早被删除的节点最后被添加回链表。

因此,我们从栈顶开始,每次弹出一个节点,然后创建一个新的节点,并将其添加到链表的头部。这样,我们就可以保证节点的原始顺序被保持。

这就是这道题的完整解题思路啦,下面请看完整代码~

三、完整代码

import java.util.*;/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/public class Partition {public ListNode partition(ListNode pHead, int x) {// write code hereif(pHead == null){return null;}Stack<Integer> stack = new Stack<>();ListNode cur = pHead;ListNode prev = null;while(cur != null){if(cur.val < x){stack.add(cur.val);if(cur == pHead){pHead = pHead.next;cur = pHead;}else{cur = cur.next;prev.next = cur;}}else{prev = cur;cur = cur.next;}}while(!stack.isEmpty()){ListNode newNode = new ListNode(stack.pop());newNode.next = pHead;pHead = newNode;}return pHead;}
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

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

相关文章:

  • FISCOBCOS入门(十)Truffle测试helloworld智能合约
  • Unity Text文本首行缩进两个字符的方法
  • TS的函数重载、类型合并、类型断言
  • JVM:字节码文件,类的生命周期,类加载器
  • 【IPC】消息队列
  • 内网穿透工具NPS(保姆级教程)
  • 最长公共子序列问题
  • 服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例
  • 桥接模式-C++实现
  • PHP字符串函数的解析
  • 科研学习|研究方法——使用python强大的Statsmodel 执行假设检验和线性回归
  • 设计模式——责任链模式
  • nginx得if语句内proxy_pass不允许携带url部分,如何处理
  • CentOS7设置 redis 开机自启动
  • C++虚函数(定义,作用,原理,案例)
  • C#中.NET 6.0 控制台应用通过EF访问新建数据库
  • conda创建pytorch环境报错
  • 数据结构-插入排序实现
  • CGlib动态代理和JDK动态代理
  • 分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测
  • Python OpenCV 视频抽帧处理并保存
  • 英伟达AI布局的新动向:H200 GPU开启生成式AI的新纪元
  • Windows11 python3.12 安装pyqt6 pyqt6-tools
  • 反弹Shell
  • Guava RateLimiter的限流机制详解
  • 详解nginx的root与alias
  • 在HBuilderX中配置Vue Router的步骤
  • 通过接口抓取公众号信息并群发
  • Python基础入门----如何通过conda搭建Python开发环境
  • 计算机网络的体系结构