1. 程式人生 > 實用技巧 >LeetCode 86. 分隔連結串列

LeetCode 86. 分隔連結串列

86. 分隔連結串列

Difficulty: 中等

給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:

輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5

Solution

如果沒有second.next = None這一行程式碼,新得出的連結串列中將會有一個環,比如根據下面給出的解法,first是1->2->2,second是4->3->5,此時second中的5節點仍然還是指向2(也就是first中的最後一個節點),然後first.next = high.next

,此時連結串列中就存在一個環了。所以需要使得second連結串列的最後一個節點指向None。

# Definition for singly-linked list.
# class ListNode:
#   def __init__(self, x):
#     self.val = x
#     self.next = None
​
class Solution:
  def partition(self, head: ListNode, x: int) -> ListNode:
    if not head: return None
    
    low, high = ListNode(-1), ListNode(-1)
    first, second = low, high
    
    while head:
      if head.val < x:
        first.next = head
        first = first.next
      else:
        second.next = head
        second = second.next
      head = head.next
    second.next = None
    first.next = high.next
    return low.next