Go語言程式:向連結串列新增元素
在 Go 語言中,我們可以使用節點結構體(node struct)和連結串列結構體(linkedlist struct)來向連結串列新增元素。連結串列是一種資料結構,由一系列節點組成,每個節點包含一個元素以及指向序列中下一個節點的引用。它是一種線性資料結構,節點之間透過指標連線,並且可以從第一個節點(頭部)訪問到最後一個節點(尾部)。與需要移動所有元素的陣列不同,連結串列只需要修改相鄰節點的指標,這使得它們在需要頻繁且動態地新增或刪除資料的情況下非常有用。
方法 1:使用節點結構體
在這種方法中,連結串列被表示為節點鏈,其中每個節點都由一個值和一個指向列表中下一個節點的指標組成。add_node 函式使用對列表頭部的引用和一個值來新增一個包含該值的新節點到列表的末尾。主函式提供了一些遍歷和向列表中新增元素的示例。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包),其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。
步驟 2 − 建立一個節點結構體,包含一個整數值和一個指向下一個節點的指標。
步驟 3 − 建立一個 add_node 函式,該函式接受一個整數值和一個指向連結串列頭部的指標作為引數。
步驟 4 − 使用 add_node 函式建立一個具有指定值的新節點。
步驟 5 − 如果頭部為空,則將新節點分配給連結串列的頭部。
步驟 6 − 如果列表頭部不為空,則遍歷連結串列到最後一個節點,並將新節點的 next 指標指向最後一個節點。
步驟 7 − 返回連線列表的頭部。
步驟 8 − 在 main 函式中建立一個指向連結串列頭部的指標,並將其初始化為 nil。
步驟 9 − 使用 add_node 函式重複新增元素到連結串列中,同時更新列表的頭部。
步驟 10 − 從頭部開始遍歷連結串列,列印每個節點的值。
步驟 11 − 使用 fmt.Println() 函式執行列印語句,其中 ln 表示換行。
示例
在這個示例中,我們將使用節點結構體向連結串列新增元素。讓我們看看程式碼。
package main import "fmt" type node struct { //define a node struct value int next *node } func add_node(head *node, value int) *node { newNode := &node{value: value} if head == nil { head = newNode } else { current := head for current.next != nil { current = current.next } current.next = newNode } return head } func main() { fmt.Println("The elements added in the linked list are:") var head *node head = add_node(head, 10) //add elements to the list head = add_node(head, 20) head = add_node(head, 30) current := head for current != nil { fmt.Println(current.value) //print the added values current = current.next } }
輸出
The elements added in the linked list are: 10 20 30
方法 2:使用連結串列結構體
此示例使用一個單獨的 linkedList 結構體來表示連結串列,該結構體包含一個指向頭部節點的指標。linkedList 結構體的 addNode 方法將一個包含給定整數值的新節點新增到連結串列的末尾。linkedList 結構體的 traverse 方法輸出列表中每個節點的值。主函式演示瞭如何建立連結串列、向其中新增元素以及使用其函式遍歷連結串列。
演算法
步驟 1 − 建立一個名為 main 的包,並在程式中宣告 fmt(格式化包),其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。
步驟 2 − 建立一個節點結構體,包含一個整數值和一個指向下一個節點的指標。
步驟 3 − 建立一個 linkedList 結構體,包含一個指向連結串列頭部節點的指標。
步驟 4 − 為 linkedList 結構體建立一個 addNode 方法,該方法接受一個整數值作為引數。
步驟 5 − 使用 addNode 函式建立一個具有指定值的新節點。
步驟 6 − 如果頭部為空,則將新節點分配給連結串列的頭部。然後,如果列表頭部不為空,則遍歷連結串列到最後一個節點。
步驟 7 − 將新節點的 next 指標指向最後一個節點。
步驟 8 − 在 main 函式中建立一個指向 linkedList 結構體的指標,並對其進行初始化。
步驟 9 − 使用 addNode 函式重複新增元素到連結串列中。
步驟 10 − 使用 traverse 方法列印連結串列中每個節點的值。
步驟 11 − 使用 fmt.Println() 函式執行列印語句,其中 ln 表示換行。
示例
在這個示例中,我們將使用 LinkedList 結構體向列表新增元素。
package main import "fmt" type node struct { //define a node struct value int next *node } type linkedList struct { head *node } func (lt *linkedList) addNode(value int) { newNode := &node{value: value} if lt.head == nil { lt.head = newNode } else { current := lt.head for current.next != nil { current = current.next } current.next = newNode } } func (lt *linkedList) traverse() { current := lt.head for current != nil { fmt.Println(current.value) //print the added values current = current.next } } func main() { list := &linkedList{} fmt.Println("The elements added to linked list are:") list.addNode(10) //add values to the list list.addNode(20) list.addNode(30) list.traverse() }
輸出
The elements added to linked list are: 10 20 30
結論
我們使用兩個示例執行了向連結串列新增元素的程式。在第一個示例中,我們使用了節點結構體,在第二個示例中,我們使用了 LinkedList 結構體。