leetcode系列第六弹 💥「86 - 分隔链表 」 🥒

147 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

hi, 我是小黄瓜没有刺。一枚菜鸟瓜🥒,期待关注➕ 点赞,共同成长~

leetcode链表系列第五篇!🎊

题目 👾

86. 分隔链表

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

你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:

image.png

输入: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

思路 ✨

  1. 先创建两个空链表
  2. 遍历原链表,判断每个值大于或者小于x的值
  3. 将两个链表连接起来,左侧链表的尾节点连接到右侧链表的头节点

解答 🎉

/**
* 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-vue3javascript基础知识系列,希望能一直坚持下去,期待多多点赞🤗🤗,一起进步!🥳🥳