python/golang 刪除鏈表中的元素
先用使用常規(guī)方法,兩個(gè)指針:
golang實(shí)現(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 { // 當(dāng)前鏈表是空鏈表 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ǎng)h除的是頭節(jié)點(diǎn) link.head = current.next } else if current == link.tail { // 要?jiǎng)h除的是尾節(jié)點(diǎn) previous.next = nil link.tail = previous } else { // 要?jiǎng)h除的是中間的節(jié)點(diǎn) 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實(shí)現(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: # 當(dāng)前鏈表是空鏈表 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ǎng)h除的是頭節(jié)點(diǎn) self.head = cur.next elif cur == self.tail: # 要?jiǎng)h除的是尾節(jié)點(diǎn) pre.next = None self.tail = pre else: # 要?jiǎng)h除的是中間的節(jié)點(diǎn) pre.next = cur.next self.lenth -= 1 break pre = cur cur = cur.next if cur == None: print("未找到", v) break
只使用使用一個(gè)指針實(shí)現(xiàn)鏈表的刪除:
golang實(shí)現(xiàn):
func (link *Link) remove_with_one_pointer(v int) { if link.lenth == 0 { return } if link.tail.value == v { // 要?jiǎng)h除的節(jié)點(diǎn)是尾節(jié)點(diǎn),需特殊處理 if link.lenth == 1 { // 如果鏈表只有一個(gè)節(jié)點(diǎn) link.head = nil link.tail = nil } else { //大于一個(gè)節(jié)點(diǎn) cur := link.head for ; cur.next.next != nil; cur = cur.next { } //找到尾節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn) cur.next = nil link.tail = cur } link.lenth -= 1 return } //要?jiǎng)h除的節(jié)點(diǎn)在頭部/中間 的常規(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實(shí)現(xiàn):
def remove_with_one_pointer(self, v): if self.lenth == 0: return if self.tail.value == v: # 要?jiǎng)h除的節(jié)點(diǎn)是尾節(jié)點(diǎn),需特殊處理 if self.lenth == 1: # 如果鏈表只有一個(gè)節(jié)點(diǎn) self.head = None self.tail = None else: # 大于一個(gè)節(jié)點(diǎn) cur = self.head while True: if cur.next.next is None: # 找到尾節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn) break else: cur = cur.next cur.next = None self.tail = cur self.lenth -= 1 return # 要?jiǎng)h除的節(jié)點(diǎn)在頭部/中間 的常規(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 刪除鏈表中的元素的詳細(xì)內(nèi)容,更多關(guān)于python/golang 鏈表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決anaconda安裝pytorch報(bào)錯(cuò)找不到包的問(wèn)題
這篇文章主要介紹了解決anaconda安裝pytorch報(bào)錯(cuò)找不到包的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03django進(jìn)階之cookie和session的使用示例
這篇文章主要介紹了django進(jìn)階之cookie和session的使用示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08pycharm 使用心得(八)如何調(diào)用另一文件中的函數(shù)
事件環(huán)境: pycharm 編寫(xiě)了函數(shù)do() 保存在make.py 如何在另一個(gè)file里調(diào)用do函數(shù)?2014-06-06Python數(shù)據(jù)列表中的空補(bǔ)0的問(wèn)題解決
在Python中,如果你有一個(gè)包含空值的數(shù)據(jù)列表,你可以使用列表推導(dǎo)式或循環(huán)將這些空值替換為0,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-03-03Python MOCK SERVER moco模擬接口測(cè)試過(guò)程解析
這篇文章主要介紹了Python MOCK SERVER moco模擬過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04基于Python-turtle庫(kù)繪制路飛的草帽骷髏旗、美國(guó)隊(duì)長(zhǎng)的盾牌、高達(dá)的源碼
這篇文章主要介紹了基于Python-turtle庫(kù)繪制路飛的草帽骷髏旗、美國(guó)隊(duì)長(zhǎng)的盾牌、高達(dá)的源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02python如何求取指定范圍內(nèi)的質(zhì)數(shù)
這篇文章主要介紹了python如何求取指定范圍內(nèi)的質(zhì)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python利用ElementTree模塊處理XML的方法詳解
ElementTree是python的XML處理模塊,它提供了一個(gè)輕量級(jí)的對(duì)象模,下面這篇文章就來(lái)給大家介紹了關(guān)于Python利用ElementTree模塊處理XML的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法
這篇文章主要介紹了Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)doc格式文件讀取及轉(zhuǎn)換pdf格式文件的操作技巧,以及php調(diào)用py文件的具體實(shí)現(xiàn)方法,需要的朋友可以參考下2018-01-01Python如何安裝mysql數(shù)據(jù)庫(kù)模塊
這篇文章主要介紹了Python如何安裝mysql數(shù)據(jù)庫(kù)模塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07