リストと特定の値xが与えられると、リストにすべてのノードは、xより大きいか、前のノードxに等しい未満であるように分離されています。2つのパーティションの初期の相対位置が、あなたは、各ノードを維持する必要があります。
例:
入力:ヘッド= 1-> 4-> 3- > 2-> 5-> 2、X = 3
出力:1-> 2-> 2-> 4-> 3-> 5
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/partition-list
大半は、xが場所、混乱少しだと思うようになりました。Xによって後で見出さは、Xノードの値が与えられます。
愚かなアイデアは、使用リストにあります:
# 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
res = []
while(head):
res.append(head.val)
head = head.next
dummy = ListNode(0) #装比x小的节点
dummy1 = ListNode(0) #装比x大的节点
cur = dummy
curr = dummy1
for i in res:
if i<x:
dummy.next = ListNode(i)
dummy = dummy.next
else:
dummy1.next = ListNode(i)
dummy1 = dummy1.next
dummy.next = curr.next
return cur.next
宇宙の複雑さのために、とカットリストに:
# 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
dummy = ListNode(0) #装小的
dummy1 = ListNode(0) #装大的
cur = dummy
curr = dummy1
while(head):
if head.val<x:
dummy.next = head
dummy = dummy.next
else:
dummy1.next = head
dummy1 = dummy1.next
head = head.next
dummy1.next=None #注意删大的最后的尾巴
dummy.next = curr.next
return cur.next
このアイデアは、以前のものと類似している、でもdummy1に、大きなポイントを削除します。ダミーはわずかを保持う
# 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
dummy = ListNode(0) #装值小于x的节点
dummy1 = ListNode(0) #装值大于x的节点
cur = dummy
curr = dummy1
dummy.next = head
while(dummy.next):
if dummy.next.val>=x:
dummy1.next = dummy.next #先连接后删除
dummy.next = dummy.next.next
dummy1 = dummy1.next
else:
dummy = dummy.next
dummy1.next=None # 注意把最后大于x节点的尾巴删掉
dummy.next = curr.next
return cur.next