刪除鍊錶中重複的結點

2021-08-20 21:54:16 字數 1839 閱讀 7353

題目描述

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

解題思路:

先新建乙個新的節點,flag為false,如果沒有重複出現,那麼就加入,如果重複出現就flag=true,直到碰到不一樣的點再把flag重置為false。

class

listnode:

def__init__

(self, x):

self.val = x

self.next = none

class

solution:

defdeleteduplication

(self, phead):

# write code here

ifnot phead: return phead

begin = listnode('#')

pre = begin

flag = false

temp = phead

while temp.next:

if temp.val == temp.next.val:

flag = true

temp = temp.next

elif flag:

flag = false

temp = temp.next

else:

pre.next = temp

pre = temp

temp = temp.next

#因為temp要與temp.next比較,如果沒有next,那麼這一位就被剩下來了,所以下面要看看最後一位是否是重複出現的。

ifnot flag:

#不是把最後一位加入進來

pre.next = temp

else:

#這一步是因為如果最後一位是重複出現的如 3,4,5,5 那麼pre現在指向的是4,但是4本身的指標指向第乙個5,所以要把pre.next置為空。

pre.next = none

return begin.next

解法2:

遞迴

class

solution:

defdeleteduplication

(self, phead):

# write code here

ifnot phead: return phead

begin = listnode('#')

self.recursive(begin, phead)

return begin.next

defrecursive

(self,begin, phead):

if phead is

none

or phead.next is

none:

begin.next = phead

return

if phead.val != phead.next.val:

begin.next = phead

begin = phead

self.recursive(begin, phead.next)

else:

while phead.next and phead.val == phead.next.val:

phead = phead.next

if phead.next:

self.recursive(begin,phead.next)

else:

begin.next = none

刪除鍊錶中重複的結點

題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。刪除鍊錶中重複的結點 author 過路的守望 public class duplicationnode 新建乙個節點指向頭結點 li...

刪除鍊錶中重複的結點

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 解法一 遞迴 public class listnode public class solution if phead.next.val phe...

刪除鍊錶中重複的結點

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 題目分析 刪除鍊錶中的結點要比較當前結點是否與前面結點和後面結點相同,只有兩個都不同的結點才保留。用pre儲存前乙個節點,cur儲存當前結點,c...