Golang程序 从链表中删除元素

Golang程序 从链表中删除元素

在Go中,链表是一个线性数据结构,用指针连接各个项目,从第一个节点(头)到最后一个节点,每个节点都可以被访问(尾)。我们将用两个例子来执行从链接列表中删除元素的程序。第一个例子使用节点结构,而第二个例子使用一个假节点

方法一:使用Node结构

这段代码创建了一个Node结构,它有两个字段。Value和Next,它链接到列表中的下一个节点。remove_node 方法从列表中移除具有提供的值的节点,并返回列表的新头部。它接受列表的头部和要删除的值作为参数。

算法

  • 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。

  • 第2步 – 创建一个节点结构,其值为int类型,下一个为节点类型。

  • 第 3步– 创建一个函数remove_node,在该函数中验证头部节点是否为空。如果是,则返回nil。

  • 第4步 – 验证头部节点的值是否与将被删除的值相匹配。如果是的话,返回列表中的下一个节点。

  • 第5步 – 在下一步,将头部节点设置为当前节点的指针。

  • 第6步 – 然后,遍历列表,只要下面的节点不为零。

  • 第7步– 更新当前节点的下一个指针,跳过下面的节点,如果下面节点的值等于要消除的值,则结束循环。

  • 第8步 – 将下一个节点作为当前节点的指针。

  • 第9步 – 将头部节点返回给下面的函数。

  • 第 10步 – 在主函数中打印从链接列表中删除元素后的当前值。

例子

在这个例子中,我们将使用节点结构从链表中删除元素。

package main
import "fmt"

type Node struct {
   Value int
   Next  *Node
}

func remove_node(head *Node, value int) *Node {
   if head == nil {
      return nil
   }

   if head.Value == value {
      return head.Next
   }

   current := head //remove the elements from the list
   for current.Next != nil {
      if current.Next.Value == value {
         current.Next = current.Next.Next
         break
      }
      current = current.Next
   }

   return head
}

func main() {
   head := &Node{Value: 1, Next: &Node{Value: 2, Next: &Node{Value: 3, Next: nil}}}
   fmt.Println("The linked list after removal of element is:")
   head = remove_node(head, 2)
   for current := head; current != nil; current = current.Next {
      fmt.Println(current.Value) //print the modified linked list
   }
}

输出

The linked list after removal of element is:
1
3

方法2:使用Dummy节点

这个方法采用了一个假的节点来使边缘情况更简单。remove_node 函数将列表的头部和要删除的值作为参数,并返回列表的新头部,从而删除带有提供的值的节点。让我们通过代码和算法来理解这个概念。

算法

  • 第1步 – 创建一个包main,并在程序中声明fmt(format package)包,其中main产生可执行代码,fmt帮助格式化输入和输出。

  • 第2步 – 创建一个Node结构,num_value为int类型,Next为Node类型。

  • 第 3步 – 创建一个函数remove_node,有两个输入head和value。然后,制作一个假节点,并将其下一个字段设置为列表的头部。

  • 第4步– 创建一个指向假节点的先行节点指针。

  • 第 5步– 在下一步中,遍历列表,只要下面的节点不为零。

  • 第6步– 更新前一个节点的下一个指针,跳过后续节点,如果后续节点的值与要删除的值相同,则结束循环。

  • 第7步 – 然后,向下面的节点,移动前一个节点的指针。

  • 第8步 – 移除提供值的节点后的列表头部作为假节点的下一个字段。

  • 第9步 – 将dummy.next返回给函数,在主函数中使用fmt.Println()函数打印链接列表,其中ln表示新行。

例子

在这个例子中,我们将使用假节点从链接列表中删除元素。

package main
import "fmt"

type Node struct {
   num_value int
   Next      *Node
}

func remove_node(head *Node, value int) *Node {
   dummy := &Node{Next: head} //remove the required element from the list
   prev := dummy
   for prev.Next != nil {
      if prev.Next.num_value == value {
         prev.Next = prev.Next.Next
         break
      }
      prev = prev.Next
   }
   return dummy.Next
}
func main() {
   fmt.Println("The linked list after removal of elements:")
   head := &Node{num_value: 1, Next: &Node{num_value: 2, Next: &Node{num_value: 3, Next: nil}}}
   head = remove_node(head, 2)
   for current := head; current != nil; current = current.Next {
      fmt.Println(current.num_value)   //print the modified list
   }
}

输出

The linked list after removal of elements:
1
3

结论

我们用两个例子执行了从链接列表中删除元素的程序。在第一个例子中,我们使用节点结构,在第二个例子中,我们将使用假节点来执行程序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程