[路飞]_leetcode-面试题 02.04-分割链表

简介: leetcode-面试题 02.04-分割链表

网络异常,图片无法展示
|


[题目地址][B站地址]


给你一个链表的头节点 head 和一个特定值 **x ,请你对链表进行分隔,使得所有 小于x 的节点都出现在 大于或等于x 的节点之前。


你不需要 保留 每个分区中各节点的初始相对位置。


示例 1:


网络异常,图片无法展示
|


输入: head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
复制代码


示例 2:


输入: head = [2,1], x = 2
输出:[1,2]
复制代码


提示:


  • 链表中节点的数目在范围 [0, 200]
  • -100 <= Node.val <= 100
  • -200 <= x <= 200


本题并不复杂,只需要根据节点值和 x 的关系,将节点进行分类即可。

解题思路如下:


  1. 创建一个虚拟头节点作为较小节点链表头节点 smallHead
  2. 创建一个虚拟头节点作为较大节点链表头节点 bigHead
  3. 遍历输入链表,判断节点值是否小于 x,如果条件成立,则将该节点连接到较小节点链表的末尾,反之连接到较大节点链表的末尾
  4. 将较大节点链表末尾节点的 next 指向 null ,防止出现环
  5. 将较大节点链表头节点连接到较小节点链表末尾
  6. 返回较小节点链表头节点即可


动画演示如下:

网络异常,图片无法展示
|
代码如下:


var partition = function(head, x) {
  // 创建较小节点链表头节点
  const smallHead = new ListNode(0),
  // 较大节点链表头节点
  bigHead = new ListNode(0);
  // 较小链表尾节点指针
  let smallTail = smallHead,
  // 较大链表尾节点指针
  bigTail = bigHead;
  // 遍历输入链表
  while(head){
    // 如果节点值小于 x,连接到较小节点链表末尾
    if(head.val<x){
      smallTail.next = head;
      smallTail = smallTail.next;
    }else{
      // 反之连接到较大节点链表末尾
      bigTail.next = head;
      bigTail = bigTail.next;
    }
    head = head.next;
  }
  // 较大链表尾节点的next指向null,防止出现环
  bigTail.next = null;
  // 将较大节点链表连接到较小节点链表后面
  smallTail.next = bigHead.next;
  // 返回较小节点链表的头节点
  return smallHead.next;
};
复制代码


至此我们就完成了 leetcode-面试题 02.04-分割链表


如有任何问题或建议,欢迎留言讨论!

相关文章
|
7天前
题目----力扣--回文链表
题目----力扣--回文链表
13 0
|
7天前
题目----力扣--合并两个有序链表
题目----力扣--合并两个有序链表
11 0
|
7天前
题目----力扣--反转链表
题目----力扣--反转链表
15 0
|
7天前
题目----力扣--链表的中间结点
题目----力扣--链表的中间结点
6 0
|
7天前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
13 1
|
3天前
|
缓存 安全 Java
【Java面试——并发基础、并发关键字】
随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略: 先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是: 比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。
|
11天前
|
SQL 存储 Java
致远互联java实习生面试
致远互联java实习生面试
30 0
|
11天前
|
Java
java面试基础 -- 普通类 & 抽象类 & 接口
java面试基础 -- 普通类 & 抽象类 & 接口
17 0
|
11天前
|
存储 安全 Java
java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?
java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?
19 0
|
12天前
|
Java
java面试基础 -- 方法重载 & 方法重写
java面试基础 -- 方法重载 & 方法重写
9 0