更多題目移步【力扣簡(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ū)留言~