力扣练习4.29

86. 分隔链表

解题思路 :设置两个链表,分别装小于x和>=x的节点,最后将两个链表拼接。
步骤

1.初始化两个新链表的头结点和指针节点,初始化链表的指针节点

2.遍历变量,如果是小于x,就将第一个链表的指针节点指向该节点,并更新第一个链表的指针节点;大于等于同理;最后也要更新原始链表的指针节点

3.拼接两个链表,将第一个的尾节点指向第二个链表的头节点

4.为了防止第二个链表的尾节点指向不明确,导致可能的陷入环形结构,将其指向为空

5.返回第一个链表的头节点

python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
        dummy_1 = ListNode(0) # 哑节点,用于存储所有小于x的节点
        dummy_2 = ListNode(0) # 哑节点,用于存储所有大于等于x的节点
        cur_1 = dummy_1 # 指针节点
        cur_2 = dummy_2
        cur = head
        # 遍历链表
        while cur:
            # 如果是小于x的节点
            if cur.val < x:
                cur_1.next = cur # 将链表1的指针指针节点指向该节点
                cur_1 = cur_1.next # 移动链表1的指针节点
            else:
                cur_2.next = cur
                cur_2 = cur_2.next
            # 移动链表节点到下一个节点
            cur = cur.next
        
        # 链接两个链表,使用链表1的尾节点指向链表2的头结点
        cur_1.next = dummy_2.next
        # 确保大于或等于x的链表的尾部元素的next指针为None,避免循环
        cur_2.next = None
        # 返回链表1的头结点
        return dummy_1.next
        
相关推荐
小羊在睡觉6 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go
大大杰哥7 小时前
leetcode hot100(4)矩阵
算法·leetcode·矩阵
叶小鸡8 小时前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
凌波粒8 小时前
LeetCode--513.找树左下角的值(二叉树)
java·算法·leetcode
一只小逸白10 小时前
LeetCode Go 常用函数速查表
linux·leetcode·golang
Tisfy11 小时前
LeetCode 3043.最长公共前缀的长度:哈希表(不转string)
算法·leetcode·散列表·题解·哈希表
承渊政道11 小时前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
人道领域11 小时前
【LeetCode刷题日记】654.最大二叉树:递归算法详解
java·算法·leetcode
失去的青春---夕阳下的奔跑1 天前
560. 和为 K 的子数组
数据结构·算法·leetcode
m0_629494731 天前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表