【題目】83
Given a sorted linked list, delete allduplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return1->2->3.
給定一個有序鏈表,刪除重複元素,每個元素只允許出現一次
【思路】
82題是83題的升級版,做82題前防先看下83題
設立虛表頭pummy 這樣處理Linked List方便一些
p.next始終指向待比較的元素, 如果遇到了重複元素:p不動,p.next變化;如果沒有遇到重複元素,則p=p.next
【Python實現】
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
prev = ListNode(0)#創建一個結點
prev = head
p = head.next
while p:
if p.val == prev.val:#如果前一個結點值與後一個相等
prev.next = p.next#前一個結點指向p的下一個結點
p = p.next#
else:
prev = p
p = p.next
return head
if __name__ == '__main__':
nums= [3, 1]
target = 1
S = Solution1()
S.search(nums,target)
下面看82題:83題的升級版
Given a sorted linked list, delete allnodes that have duplicate numbers, leaving only distinct numbers from theoriginal list.
For example,
Given1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return2->3.
給你定一個排好序的鏈表,將所有重複的節點去掉。比如:給出1->2->3->3->4->4->5, 返回1->2->5.
判斷是重複的結點就直接移到下一位。
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
dummy = ListNode(0)
dummy.next = head
p = dummy
tmp = dummy.next#要判斷的第一個數據,也就是head數據
while p.next:
while tmp.next and tmp.next.val == p.next.val:
tmp = tmp.next#tmp下移判斷是否仍相等
if tmp == p.next:
p = p.next
tmp = p.next
else:#刪除重複點
p.next = tmp.next
return dummy.next