Python 中刪除連結串列中重複項的程式


假設我們有一個數字連結串列,我們需要刪除在連結串列中出現多次的數字(輸出中只保留一個出現),我們還需要保持原始連結串列中出現的順序。

因此,如果輸入類似於 [2 -> 4 -> 6 -> 1 -> 4 -> 6 -> 9],則輸出將為 [2 -> 4 -> 6 -> 1 -> 9]。

為了解決這個問題,我們將遵循以下步驟 -

  • 如果節點不為空,則
    • l := 一個新的集合
    • temp := 節點
    • 將 temp 的值插入 l
    • 當 temp 的下一個節點不為空時,執行
      • 如果 temp 的下一個節點的值不在 l 中,則
        • 將 temp 的下一個節點的值插入 l
        • temp := temp 的下一個節點
      • 否則,
        • temp 的下一個節點 := temp 的下一個節點的下一個節點
  • 返回節點

讓我們看看下面的實現以獲得更好的理解 -

示例

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
      print(']')
class Solution:
   def solve(self, node):
      if node:
         l = set()
         temp = node
         l.add(temp.val)
         while temp.next:
            if temp.next.val not in l: l.add(temp.next.val)
               temp = temp.next
            else:
               temp.next = temp.next.next
         return node
ob = Solution()
head = make_list([2, 4, 6, 1, 4, 6, 9])
print_list(ob.solve(head))

輸入

[2, 4, 6, 1, 4, 6, 9]

輸出

[2, 4, 6, 1, 9, ]

更新於: 20-Oct-2020

186 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告