python 刪除鍊錶中重複的結點

2021-10-02 19:35:34 字數 1850 閱讀 2080

'''

在乙個排序的鍊錶中,存在重複的結點,刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標,例如,鍊錶 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...