Pythonのアルゴリズム日記(リストシリーズ)_leetcode 86区切りのリスト

リストと特定の値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

 

公開された44元の記事 ウォンの賞賛0 ビュー1903

おすすめ

転載: blog.csdn.net/weixin_39331401/article/details/104614810