83. 刪除鏈表中重復(fù)的元素(Python)

更多題目移步【力扣簡(jiǎn)單題】

題目

難度:★☆☆☆☆
類型:鏈表

給定一個(gè)排序鏈表,刪除所有重復(fù)的元素,使得每個(gè)元素只出現(xiàn)一次。

示例

示例 1:

輸入: 1->1->2
輸出: 1->2
示例 2:

輸入: 1->1->2->3->3
輸出: 1->2->3

解答

這是鏈表中的基礎(chǔ)題,刪除排序鏈表中重復(fù)元素,需要遍歷鏈表,并將后面和當(dāng)前相等的結(jié)點(diǎn)刪去,這里為了幫助大家理解,特地增加了創(chuàng)建鏈表函數(shù)(create_linked_list)和打印鏈表函數(shù)(print_linked_list)。

class Solution:
    def deleteDuplicates(self, head):
        cur = head                          # 定義臨時(shí)結(jié)點(diǎn)
        while cur and cur.next:             # 當(dāng)前結(jié)點(diǎn)和下一個(gè)結(jié)點(diǎn)有效時(shí)
            if cur.val == cur.next.val:     # 如果當(dāng)前結(jié)點(diǎn)的值等于下一個(gè)結(jié)點(diǎn)的值
                cur.next = cur.next.next    # 去掉下一個(gè)結(jié)點(diǎn)
            else:
                cur = cur.next              # 否則當(dāng)前結(jié)點(diǎn)后移
        return head                         # 返回頭結(jié)點(diǎn)


class ListNode:
    """
    鏈表節(jié)點(diǎn)
    """
    def __init__(self, x):          # 在創(chuàng)建結(jié)點(diǎn)時(shí),執(zhí)行初始化賦值程序
        self.val = x                # 當(dāng)前結(jié)點(diǎn)的值
        self.next = None            # 下一個(gè)節(jié)點(diǎn),剛創(chuàng)建時(shí)為None


def create_linked_list(nums):
    """
    創(chuàng)建鏈表
    :param nums: 輸入代表里鏈表的數(shù)字列表
    :return: 返回創(chuàng)建好的鏈表的頭結(jié)點(diǎn),可以得到整個(gè)鏈表的所有信息
    """
    if not nums:                        # 輸入空列表
        return
    head = prev = ListNode(nums[0])     # 第一個(gè)結(jié)點(diǎn)
    for num in nums[1:]:
        tmp = ListNode(num)             # 創(chuàng)建當(dāng)前結(jié)點(diǎn)
        prev.next = tmp                 # 掛在已經(jīng)創(chuàng)建好的鏈表末尾
        prev = prev.next                # 指針后移
    return head


def print_linked_list(head):
    """
    打印鏈表
    :param head: 要打印的鏈表的頭結(jié)點(diǎn)
    :return: 結(jié)點(diǎn)值列表
    """
    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])     # 創(chuàng)建鏈表
    s = Solution()                                          # 實(shí)例化解決方案
    r = s.deleteDuplicates(h)                               # 調(diào)用去重方法
    print_linked_list(r)                                    # 打印鏈表

如有疑問或建議,歡迎評(píng)論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容