为了更好地理解这个示例,我们始终建议您学习下面列出的 Golang 编程 的基础主题
链表是一种基本的数据结构,它由一串节点组成,每个节点有两个属性:数据和指向下一个节点的指针。这里的“Next”是一个指向列表中下一个节点的指针。有许多链表操作允许我们对链表执行不同的动作。例如,删除操作将从链表中删除一个节点。
在这个程序中,我们将创建一个单向链表,并从中删除第 K 个节点。为了完成这个任务,我们将通过遍历列表直到头节点变为 nil 来找到第 k 个节点。如果我们在列表中找到了第 k 个节点,那么通过删除第 k 个节点来更新链表。让我们更详细地看一下这个程序。
在这个程序中,我们将重点关注如何使用 GO 语言从给定的链表中删除第 k 个节点。
程序中有一个 fmt 包,用于将一些标准库导入到程序中。使用内置函数 fmt.println() 在屏幕上打印任何内容。我们需要导入 “fmt” 包才能使用这个函数。之后,打开 main 函数。我们在 main 函数内部完成整个程序,这是我们程序的起点。
在这里,我们使用一个结构体来定义一个节点。函数 NewNode 通过将数据分配给节点值并将节点的指针更改为下一个节点来创建链表的节点。现在,head 是链表的起始节点。
函数 TraverseLinkedList(head) 通过遍历从 head 开始的列表,直到找到引用值为 nil,来显示链表中的所有节点。
当您想要从给定的链表中删除第 k 个节点时,请调用函数 DeleteKthNode(head,k)。在此函数中,它定义了一个方法,该方法接受链表的 head 和您想要删除的输入值。它会检查 head 是否等于 nil,这意味着列表是空的。如果 head 等于 nil,则返回 head 而不删除任何节点。否则,通过删除第 k 个节点来更新链表。为此,遍历链表以找到第 k 个节点的位置。如果找到第 k 个节点,则用其下一个节点的下一个值覆盖该节点的 next 值。如果未找到第 k 个节点,则返回 head 而不删除任何节点。
最后,您可以通过调用 TraverseLinkedList 函数来显示更新后的链表。
下面是在 Go 程序中用于从链表中删除第 k 个节点的步骤。
步骤 1:开始
步骤 2:定义一个节点结构体
步骤 3:通过调用函数 NewNode() 创建一个链表。这里的 head 是链表的起始节点。
步骤 4:通过调用函数 TraverseLinkedList(head) 显示输入的链表。
步骤 5:通过调用 DeleteKthNode(head, k) 从链表中删除第 k 个节点
步骤 6:通过调用函数 TraverseLinkedList(head) 显示删除节点后的链表。
步骤 7:退出
步骤 1:声明变量 n 为 Node 类型。
步骤 2:通过将数据分配给节点值并将节点的指针更改为下一个节点来创建节点 n。
步骤 3:返回节点 n
步骤 1:通过遍历从 head 开始的列表,直到找到引用值为 nil,来显示链表中的所有节点。
步骤 1:定义一个接受链表 head 的方法。
步骤 2:检查 head 是否等于 nil,这意味着列表是空的。如果 head 等于 nil,则返回 head 而不删除任何节点。否则执行步骤 3。
步骤 3:定义一个节点 temp,它最初将指向列表的 head。
步骤 4:遍历列表,直到 temp 指向 nil。
步骤 5:在每次迭代中,检查 temp 是否将指向第 k 个节点。如果是,则用其下一个节点的下一个值覆盖该节点的 next 值。否则,返回 head 而不删除任何节点。
package main
import "fmt"
type Node struct {
value int
next *Node
}
func NewNode(value int, next *Node) *Node{
var n Node
n.value = value
n.next = next
return &n
}
func TraverseLinkedList(head *Node){
temp := head
for temp != nil {
fmt.Printf("%d ", temp.value)
temp = temp.next
}
fmt.Println()
}
func DeleteAfterKthNode(head *Node, k int) *Node{
// Delete after Kth node.
if head == nil{
return head
}
temp := head
for temp != nil{
if temp.value == k{
temp.next = temp.next.next
}
temp = temp.next
}
return head
}
func main(){
head := NewNode(320, NewNode(110, NewNode(402, NewNode(503, nil))))
fmt.Printf("Input Linked list is: ")
TraverseLinkedList(head)
head = DeleteAfterKthNode(head, 402)
fmt.Printf("Node %d is deleted.\nUpdated Linked List after deletion is:\n", 402)
TraverseLinkedList(head)
}
Input Linked list is: 320 110 402 503 Node 402 is deleted. Updated Linked List after deletion is: 320 110 402