'''
在乙個排序的鍊錶中,存在重複的結點,刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標,例如,鍊錶 1->2->3->3->4->4->5,處理為 1->2->3->4->5
思路:鍊錶是遞增的,直接對鍊錶用指標取值-判斷,復合不重複條件的保留,不符合條件的去除
情況1:head.vale != head.next.value
head = head.next
情況2:head.value == head.next.value
head.next = head.next.next
head = head.next
'''#定義節點類,用於生成鍊錶
class
node
:def
__init_
(self,value)
: self.value = value
self.
next
=none
class
solution
:#刪除重複節點,並返回新鍊錶的頭結點指標值
defdel_repeat_node
(self,head)
:#空鍊錶和只有乙個結點的鍊錶,直接返回自身
if head is
none
or head.
next
isnone
:return head
#頭結點指標指向頭結點,用於儲存頭結點
cur = head
#迴圈條件,當當前節點和當前節點的下乙個節點都存在時,比較是否相等,如果不存在,則說明到了尾節點了
#示例鍊錶:100->200->200->200->400->none
while head and head.
next
:#如果前後兩個結點相等,讓前面乙個節點的next指向next.next結點(就刪除了相同節點),然後向後移動乙個節點
if head.value == head.
next
.value:
head.
next
= head.
next
.next
#對head重新賦值,賦值成原節點的下乙個節點
head = head.
next
#如果不相等,直接重新賦值head,移動到下乙個節點
head = head.
next
return cur
if __name__ ==
'__main__'
: s = solution(
)#生成各個節點
p1 = node(
100)
p2 = node(
200)
p3 = node(
200)
p4 = node(
200)
p4 = node(
400)
#將節點連成乙個整體鍊錶
p1.next
= p2
p2.next
= p3
p3.next
= p4
p4.next
= p5
#將舊鍊錶的頭結點傳到方法中去
cur = s.del_repeat_node(p1)
#列印出新鍊錶的頭結點
print
(cur.value)
#列印新煉表中所有節點
while cur:
print
(new_head.value,end=
' ')
cur = cur.
next
NOWCODER程式設計題 刪除鍊錶中重複的結點
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 首先判斷鍊錶是否為空,或者是否只含有乙個節點,如果是,則返回頭結點 建立乙個新節點cur,使得cur next phead。這個節點是為了防止頭...
Python 刪除鍊錶中重複的節點
題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 coding utf 8 class listnode def init self,x self.val x self.next no...
劍指 Offer JZ56 刪除鍊錶中重複的結點
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 見 struct listnode class solution listnode headnode newlistnode 1 headnod...