python/golang 刪除鏈表中的元素
更新時間:2020年09月14日 10:54:47 作者:NothingLeft了
這篇文章主要介紹了python/golang 如何刪除鏈表中的元素,幫助大家更好的理解和使用python/golang,感興趣的朋友可以了解下
先用使用常規(guī)方法,兩個指針:
golang實現(xiàn):
type Node struct {
value int
next *Node
}
type Link struct {
head *Node
tail *Node
lenth int
}
// 向鏈表中添加元素
func (link *Link) add(v int) {
if link.lenth == 0 { // 當前鏈表是空鏈表
link.head = &Node{v, nil}
link.tail = link.head
link.lenth = 1
} else {
newNond := &Node{v, nil}
link.tail.next = newNond
link.tail = newNond
link.lenth += 1
}
}
// 刪除鏈表中的元素(雙指針)
func (link *Link) remove(v int) {
if link.lenth == 0 {
fmt.Println("空鏈表,不支持該操作")
return
}
var previous *Node = nil
for current := link.head; current != nil; current = current.next {
if current.value == v {
if current == link.head { // 要刪除的是頭節(jié)點
link.head = current.next
} else if current == link.tail { // 要刪除的是尾節(jié)點
previous.next = nil
link.tail = previous
} else { // 要刪除的是中間的節(jié)點
previous.next = current.next
}
link.lenth -= 1
break
}
previous = current
}
}
// 打印鏈表
func (link *Link) printList() {
if link.lenth == 0 {
fmt.Println("空鏈表")
return
}
for cur := link.head; cur != nil; cur = cur.next {
fmt.Printf("%d ", cur.value)
}
fmt.Println()
}
python實現(xiàn):
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
while 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: # 要刪除的是頭節(jié)點
self.head = cur.next
elif cur == self.tail: # 要刪除的是尾節(jié)點
pre.next = None
self.tail = pre
else: # 要刪除的是中間的節(jié)點
pre.next = cur.next
self.lenth -= 1
break
pre = cur
cur = cur.next
if cur == None:
print("未找到", v)
break
只使用使用一個指針實現(xiàn)鏈表的刪除:

golang實現(xiàn):
func (link *Link) remove_with_one_pointer(v int) {
if link.lenth == 0 {
return
}
if link.tail.value == v { // 要刪除的節(jié)點是尾節(jié)點,需特殊處理
if link.lenth == 1 { // 如果鏈表只有一個節(jié)點
link.head = nil
link.tail = nil
} else { //大于一個節(jié)點
cur := link.head
for ; cur.next.next != nil; cur = cur.next {
} //找到尾節(jié)點的前一個節(jié)點
cur.next = nil
link.tail = cur
}
link.lenth -= 1
return
}
//要刪除的節(jié)點在頭部/中間 的常規(guī)情況
for cur := link.head; cur != nil; cur = cur.next {
if cur.value == v {
cur.value = cur.next.value
cur.next = cur.next.next
link.lenth -= 1
return
}
}
fmt.Println("未找到", v)
}
python實現(xiàn):
def remove_with_one_pointer(self, v):
if self.lenth == 0:
return
if self.tail.value == v: # 要刪除的節(jié)點是尾節(jié)點,需特殊處理
if self.lenth == 1: # 如果鏈表只有一個節(jié)點
self.head = None
self.tail = None
else: # 大于一個節(jié)點
cur = self.head
while True:
if cur.next.next is None: # 找到尾節(jié)點的前一個節(jié)點
break
else:
cur = cur.next
cur.next = None
self.tail = cur
self.lenth -= 1
return
# 要刪除的節(jié)點在頭部/中間 的常規(guī)情況
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 刪除鏈表中的元素的詳細內(nèi)容,更多關(guān)于python/golang 鏈表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實現(xiàn)處理apiDoc轉(zhuǎn)swagger的方法詳解
這篇文章主要為大家詳細介紹了Python實現(xiàn)處理apiDoc轉(zhuǎn)swagger的方法,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下2023-02-02
python?argparse的使用步驟(全網(wǎng)最全)
argparse是python的一個命令行參數(shù)解析包,在代碼需要頻繁修改參數(shù)時,方便使用,主要用法就是在命令行輸入自己想要修改的參數(shù),這篇文章主要介紹了python?argparse的使用步驟(全網(wǎng)最全),需要的朋友可以參考下2023-04-04

