python/golang 링크 의 요 소 를 삭제 합 니 다.

먼저 일반적인 방법 으로 두 개의 지침 을 사용 하 세 요.
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 링크 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기