Go語言程式:在已排序的雙向連結串列中插入節點


雙向連結串列是一種資料結構,其中每個節點都包含對其前驅節點和後繼節點的引用。本程式旨在在插入新節點的同時保持連結串列的排序狀態。本文將學習如何建立一個 Go 語言程式,重點是如何在已排序的雙向連結串列中插入節點。我們將使用 `insertNode` 方法以及示例來詳細解釋這個概念。

語法

func insertNode(head *Node, value int) *Node

此語法表示一個名為“insertNode”的函式,它接收指向雙向連結串列頭節點的指標和一個整數值作為引數。它將插入一個包含給定值的新節點到連結串列中,並返回更新後的頭節點。

head.prev

head 代表連結串列的起始節點,prev 代表連結串列的最後一個節點。

current = next.prev

這用於透過移動到其前驅節點來更新當前節點。

current.value

這表示儲存在連結串列當前節點中的值。

演算法

  • 建立一個包含需要插入的資料的新節點。

  • 如果雙向連結串列為空,則將新節點設為連結串列的頭節點並返回。

  • 從頭節點開始遍歷雙向連結串列,直到找到插入新節點的合適位置。

  • 比較當前節點的資料與新節點的資料,以確定正確的位置。

  • 找到正確的位置後,更新前驅節點和後繼節點的指標,以包含新節點。

  • 調整新節點的指標,以將其連線到雙向連結串列中的前驅節點和後繼節點。

  • 返回已插入新節點的更新後的雙向連結串列。

示例

在這個例子中,我們實現了一個名為 `insertNode` 的方法,用於在已排序的雙向連結串列中插入節點。該方法接收連結串列的頭節點和要插入的節點的值作為輸入引數。在主函式中,我們建立一個包含值 10、20 和 30 的示例雙向連結串列。我們列印原始連結串列,然後呼叫 `insertNode` 方法插入一個值為 25 的節點。最後,我們列印插入後的更新後的連結串列。這段程式碼演示瞭如何使用 `insertNode` 方法在已排序的雙向連結串列中插入節點,同時保持排序順序。

package main

import "fmt"

type Node struct {
   value      int
   prev, next *Node
}

func insertNode(head *Node, value int) *Node {
   newNode := &Node{value: value}

   if head == nil {
      return newNode
   }

   if value < head.value {
      newNode.next = head
      head.prev = newNode
      return newNode
   }

   current := head
   for current.next != nil && current.next.value < value {
      current = current.next
   }

   newNode.next = current.next
   if current.next != nil {
      current.next.prev = newNode
   }
   current.next = newNode
   newNode.prev = current

   return head
}

func printList(head *Node) {
   current := head
   for current != nil {
      fmt.Printf("%d ", current.value)
      current = current.next
   }
   fmt.Println()
}

func main() {
   head := &Node{value: 10}
   node1 := &Node{value: 20}
   node2 := &Node{value: 30}

   head.next = node1
   node1.prev = head
   node1.next = node2
   node2.prev = node1

   fmt.Println("Original List:")
   printList(head)

   head = insertNode(head, 25)

   fmt.Println("Updated List:")
   printList(head)
}

輸出

Original List:
10 20 30
Updated List:
10 20 25 30

結論

總之,我們討論了在已排序的雙向連結串列中插入節點的 Go 語言程式,允許使用者在插入新節點的同時保持連結串列的排序狀態。透過遍歷連結串列和修改指標,程式確保新節點被插入到正確的位置。此演算法提供了一種高效的方式來管理 Go 語言中的已排序雙向連結串列。

更新於:2023年7月20日

瀏覽量:165

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告