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