83.チェーンテーブルの重複する要素を削除する(Python)

2097 ワード

もっと多くの問題はステップを移動します【力ボタンの簡単な問題】
タイトル
難易度:★☆☆☆☆タイプ:チェーンテーブル
ソートチェーンテーブルを指定し、重複するすべての要素を削除して、各要素が一度だけ表示されるようにします.

例1:
入力:1->1->2出力:1->2例2:
入力:1->1->2->3->3出力:1->2->3
に答える
これはチェーンテーブルの基礎問題です.ソートチェーンテーブルの重複要素を削除するには、チェーンテーブルを遍歴し、後と現在の等しいノードを削除する必要があります.ここでは、理解を助けるために、チェーンテーブル作成関数(create_linked_list)と印刷チェーンテーブル関数(print_linked_list)を追加しました.
class Solution:
    def deleteDuplicates(self, head):
        cur = head                          #       
        while cur and cur.next:             #              
            if cur.val == cur.next.val:     #                  
                cur.next = cur.next.next    #        
            else:
                cur = cur.next              #         
        return head                         #      


class ListNode:
    """
        
    """
    def __init__(self, x):          #       ,         
        self.val = x                #       
        self.next = None            #      ,     None


def create_linked_list(nums):
    """
        
    :param nums:             
    :return:             ,             
    """
    if not nums:                        #      
        return
    head = prev = ListNode(nums[0])     #      
    for num in nums[1:]:
        tmp = ListNode(num)             #       
        prev.next = tmp                 #             
        prev = prev.next                #     
    return head


def print_linked_list(head):
    """
        
    :param head:           
    :return:      
    """
    nums = []
    while head:
        nums.append(head.val)
        head = head.next
    print(nums)
    return nums


if __name__ == "__main__":
    h = create_linked_list([1, 2, 3, 3, 3, 4, 5, 6, 6])     #     
    s = Solution()                                          #        
    r = s.deleteDuplicates(h)                               #       
    print_linked_list(r)                                    #     

質問やアドバイスがあれば、コメントエリアへようこそ~