python golang 刪除鍊錶中的元素

2022-09-27 07:36:15 字數 3171 閱讀 5735

先用使用常規方法,兩個指標:

golang實現:

type node struct

type link struct

// 向鍊錶中新增元素

func (link *link) add(v int)

link.tail = link.head

link.lenth = 1

} else

link.tail.next = newnond

link.tail = newnond

link.lenth += 1

}}// 刪除鍊錶中的元素(雙指標)

func (link *link) remove(v int)

var previous *node = nil

for current := link.head; current != nil; current = current.next else if current == link.tail else

link.lenth -= 1

break

}previous = current

}}// 列印鍊錶

func (link *link) printlist()

for cur := link.head; cur != nil; cur = cur.next

fmt程式設計客棧.println()

}python實現:

class node:

def __init__(self, value, next):

self.value = value

self.next = next

def __str__(self):

return str(self.value)

class link:

def __init__(self):

self.head = none

self.tail = none

self.lenth = 0

# 向鍊錶中新增元素

def add(self, v):

if self.lenth == 0: # 當前鍊錶是空鍊錶

self.head = node(v, none)

self.tail = self.head

self.lenth = 1

else:

new_node = node(v, none)

self.tail.next = new_node

self.tail = new_node

self.lenth += 1

# 列印鍊錶

def print(self):

if self.lenth == 0:

print('空鍊錶')

return

cur = self.head

w true:

if cur == none:

print()

break

print(cur, end=' ')

cur = cur.next

# 刪除鍊錶中的元素

def remove(self, v):

if self.lenth == 0:

return

cur = self.head

pre = none

while true:

if cur.value == v:

if cur == self.head: # 要刪除的是頭節點

self.head = cur.next

elif cur == self.tail: # 要刪除的是尾節點

pre.next = none

self.tail = pre

else: # 要刪除的是中間的節點

pre.next = cur.next

self.lenth -= 1

break

bfgusviy pre = cur

cur = cur.next

if cur == none:

print("未找到", v)

break

只使用使用乙個指標實現鍊錶的刪除:

golang實現:

func (link *link) remove_with_one_pointer(v int)

if link.tail.value == v else //找到尾節點的前乙個節點

cur.next = nil

link.tail = cur

}link.lenth -= 1

return

} //要刪除的節點在頭部/中間 的常規情況

for cur := link.head; cur != nil; cur = cur.next

} fmt.println("未找到", v)

}python實現:

def remove_with_one_pointer(self, v):

if self.lenth == 0:

return

if self.tail.value == v: # 要刪除的節點是尾節點,需特殊處理

if self.lenth == 1: # 如果鍊錶只有乙個節點

self.head = none

self.tail = none

else: # 大於乙個節點

cur = self.head

while true:

if cur.next.next is none: # 找到尾節點的前乙個節點

break

else:

cur = cur.next

cur.next = none

self.tail = cur

self.lenth -= 1

return

# 要刪除的節點在頭部/中間 的常規情況

cur = self.head

while true:

if cur.value == v:

cur.value = cur.next.value

cur.next = cur.next.next

self.lenth -= 1

break

cur = cur.next

if cur is none:

print('未找到', v)

break

教你如何運用python golang實現迴圈鍊錶

這篇文章主要介紹了python golang如何實現迴圈鍊錶,幫助大家更好的理解和學習迴圈鍊錶的實現方法,感興趣的朋友可以了解下 迴圈鍊錶就是將單鏈表的末尾指向其頭部,形成乙個環。迴圈鍊錶的增刪操作和單鏈表的增刪操作區別不大。只是增加時,需要考慮空鍊錶增加第乙個節點的特殊情況 刪除時需考慮刪除節點是...

鍊錶插入刪除

include include typedef struct node node,linklist void createlist linklist head 建立鍊錶 s node malloc sizeof node s next null s data data p next s p s in...

刪除鍊錶節點

問題描述 給出單鏈表頭指標以及要刪除節點的位址,要求寫 刪除這個節點,並且時間複雜度為o 1 如何實現?分析 1 應變能力 2 對時間複雜度的理解 平常思路 prev next temp next free temp 但是該思路的時間複雜度為o n 解題 不能從phead開始找,入口在所要刪除的節點...