先用使用常規方法,兩個指標:
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開始找,入口在所要刪除的節點...