网络异常,图片无法展示
|
给你一个链表的头节点 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
的关系,将节点进行分类即可。
解题思路如下:
- 创建一个虚拟头节点作为较小节点链表头节点
smallHead
- 创建一个虚拟头节点作为较大节点链表头节点
bigHead
- 遍历输入链表,判断节点值是否小于
x
,如果条件成立,则将该节点连接到较小节点链表的末尾,反之连接到较大节点链表的末尾 - 将较大节点链表末尾节点的
next
指向null
,防止出现环 - 将较大节点链表头节点连接到较小节点链表末尾
- 返回较小节点链表头节点即可
动画演示如下:
网络异常,图片无法展示
|
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-分割链表
如有任何问题或建议,欢迎留言讨论!