python/golang 刪除連結串列中的元素
阿新 • • 發佈:2020-09-15
先用使用常規方法,兩個指標:
golang實現:
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 { // 要刪除的是頭節點 link.head = current.next } else if current == link.tail { // 要刪除的是尾節點 previous.next = nil link.tail = previous } else { // 要刪除的是中間的節點 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實現:
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: # 要刪除的是頭節點 self.head = cur.next elif cur == self.tail: # 要刪除的是尾節點 pre.next = None self.tail = pre else: # 要刪除的是中間的節點 pre.next = cur.next self.lenth -= 1 break pre = cur cur = cur.next if cur == None: print("未找到",v) break
只使用使用一個指標實現連結串列的刪除:
golang實現:
func (link *Link) remove_with_one_pointer(v int) { if link.lenth == 0 { return } if link.tail.value == v { // 要刪除的節點是尾節點,需特殊處理 if link.lenth == 1 { // 如果連結串列只有一個節點 link.head = nil link.tail = nil } else { //大於一個節點 cur := link.head for ; cur.next.next != nil; cur = cur.next { } //找到尾節點的前一個節點 cur.next = nil link.tail = cur } link.lenth -= 1 return } //要刪除的節點在頭部/中間 的常規情況 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實現:
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 連結串列的資料請關注我們其它相關文章!