欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python/golang 刪除鏈表中的元素

 更新時(shí)間:2020年09月14日 10:54:47   作者:NothingLeft了  
這篇文章主要介紹了python/golang 如何刪除鏈表中的元素,幫助大家更好的理解和使用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)文章

最新評(píng)論