持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
hi, 我是小黄瓜没有刺。一枚菜鸟瓜🥒,期待关注➕ 点赞,共同成长~
leetcode链表系列第五篇!🎊
题目 👾
86. 分隔链表
给你一个链表的头节点 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的值
- 将两个链表连接起来,左侧链表的尾节点连接到右侧链表的头节点
解答 🎉
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function(head, x) {
// 判断是否为空节点
if(!head) return null
// 定义两个空链表的头节点,创建两个指针,分别指向两个空节点的起始位置
let h1 = new ListNode(), h2 = new ListNode(), p1 = h1, p2 = h2;
// 遍历原链表
for(let p = head, q;p;p = q){
// 保存当前节点的下一个子节点
q = p.next
// 将p的next节点指向null,从后往前添加
p.next = null
// 判断是否小于x,小于x添加到p1链表,大于x则添加到p2链表
if(p.val < x) {
p1.next = p
p1 = p
} else {
p2.next = p
p2 = p
}
}
// 将p1链表的尾节点连接到p2节点的头节点
p1.next = h2.next
return h1.next
}
写在最后 ⛳
leetcode系列第六篇!未来可能会更新实现mini-vue3和javascript基础知识系列,希望能一直坚持下去,期待多多点赞🤗🤗,一起进步!🥳🥳