Go 語言程式:從連結串列中刪除元素
在 Go 中,連結串列是一種線性資料結構,其元素透過指標連線,從第一個節點(頭節點)到最後一個節點(尾節點),可以依次訪問每個節點。我們將透過兩個示例來演示從連結串列中刪除元素的程式。第一個示例使用節點結構體,第二個示例使用啞節點。
方法 1:使用節點結構體
此程式碼建立了一個 Node 結構體,它有兩個欄位:Value 和 Next,後者連結到列表中的下一個節點。remove_node 方法從列表中刪除具有指定值的節點,並返回列表的新頭節點。它接受列表的頭節點和要刪除的值作為引數。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包)。main 包生成可執行程式碼,fmt 包幫助格式化輸入和輸出。
步驟 2 − 建立一個節點結構體,其中 value 欄位型別為 int,next 欄位型別為 node。
步驟 3 − 建立一個名為 remove_node 的函式,並在該函式中檢查頭節點是否為空。如果是,則返回 nil。
步驟 4 − 檢查頭節點的值是否與要刪除的值匹配。如果是,則返回列表中的下一個節點。
步驟 5 − 在下一步中,將頭節點設定為當前節點的指標。
步驟 6 − 然後,遍歷列表,直到下一個節點不為空。
步驟 7 − 更新當前節點的 next 指標以跳過下一個節點,如果下一個節點的值等於要刪除的值,則結束迴圈。
步驟 8 − 將下一個節點設定為當前節點的指標。
步驟 9 − 將頭節點返回到下一個函式。
步驟 10 − 在 main 函式中,列印從連結串列中刪除元素後的當前值。
示例
在此示例中,我們將使用節點結構體從連結串列中刪除元素。
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:使用啞節點
此方法使用啞節點來簡化邊界情況。remove_node 函式透過接受列表的頭節點和要刪除的值作為引數,並返回列表的新頭節點,來刪除具有指定值的節點。讓我們透過程式碼和演算法來理解這個概念。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包)。main 包生成可執行程式碼,fmt 包幫助格式化輸入和輸出。
步驟 2 − 建立一個 Node 結構體,其中 num_value 欄位型別為 int,Next 欄位型別為 Node。
步驟 3 − 建立一個名為 remove_node 的函式,它有兩個輸入引數:head 和 value。然後,建立一個啞節點,並將它的 next 欄位設定為列表的頭節點。
步驟 4 − 建立一個名為 prior 的節點指標,指向啞節點。
步驟 5 − 在下一步中,遍歷列表,直到下一個節點不為空。
步驟 6 − 更新前一個節點的 next 指標以跳過下一個節點,如果下一個節點的值與要刪除的值相同,則結束迴圈。
步驟 7 − 然後,將前一個節點指標移動到下一個節點。
步驟 8 − 刪除具有指定值的節點後,列表的頭節點作為啞節點的 next 欄位。
步驟 9 − 將 dummy.next 返回到函式,並在 main 函式中使用 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
結論
我們使用兩個示例演示了從連結串列中刪除元素的程式。在第一個示例中,我們使用了節點結構體,在第二個示例中,我們使用了啞節點來執行程式。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP