Golang使用切片實(shí)現(xiàn)單鏈表的示例代碼
單鏈表(Single Linked List)是鏈表數(shù)據(jù)結(jié)構(gòu)的一種實(shí)現(xiàn)方式,它包含一系列節(jié)點(diǎn)(Node),每個(gè)節(jié)點(diǎn)都包含一個(gè)數(shù)據(jù)域和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針。與數(shù)組相比,鏈表的一個(gè)主要優(yōu)點(diǎn)是它們可以動(dòng)態(tài)地進(jìn)行擴(kuò)展和收縮,因?yàn)樗鼈兊脑卦趦?nèi)存中不是連續(xù)存儲(chǔ)的。
通過(guò)定義結(jié)構(gòu)體實(shí)現(xiàn)單鏈表的操作,no為鏈表中節(jié)點(diǎn)的id,name為節(jié)點(diǎn)id對(duì)應(yīng)的內(nèi)容,next為下一個(gè)節(jié)點(diǎn)的信息
type HeroNode struct {
no int
name string
next *HeroNode
}InputNode方法,為鏈表添加節(jié)點(diǎn)。通過(guò)定義輔助節(jié)點(diǎn),找到鏈表的最后一個(gè)節(jié)點(diǎn),并將要添加的節(jié)點(diǎn)添加到找到的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。
func InputNode(head *HeroNode, hero *HeroNode) {
text := head
for {
if text.next == nil {
break
}
text = text.next
}
text.next = hero
}InputNode2方法,為鏈表順序添加節(jié)點(diǎn)。首先還是定義一個(gè)輔助節(jié)點(diǎn),這次還另外定義一個(gè)flag為了判斷要插入的節(jié)點(diǎn)是否已經(jīng)存在。通過(guò)輔助節(jié)點(diǎn)進(jìn)行判斷插入的節(jié)點(diǎn)的id,并進(jìn)行插入對(duì)應(yīng)位置。這里要注意的是需要先將要插入的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)改為輔助節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),然后再將輔助節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)換為要插入的節(jié)點(diǎn)。一旦先將text.next=hero,原本text后面的節(jié)點(diǎn)將會(huì)失去前置節(jié)點(diǎn),那么hero節(jié)點(diǎn)將添加失敗
func InputNode2(head *HeroNode, hero *HeroNode) {
text := head
flag := true
//讓插入的節(jié)點(diǎn)的no,和text的下一個(gè)節(jié)點(diǎn)的no進(jìn)行比較
for {
if text.next == nil {
break
} else if text.next.no > hero.no {
//說(shuō)明hero應(yīng)該插入到text后面
break
} else if text.next.no == hero.no {
flag = false
break
}
text = text.next
}
if !flag {
fmt.Println("已經(jīng)存在", hero.no)
return
} else {
hero.next = text.next
text.next = hero
}
}DelectNode方法,刪除鏈表中的節(jié)點(diǎn)。通過(guò)定義輔助節(jié)點(diǎn)和flag進(jìn)行對(duì)要?jiǎng)h除節(jié)點(diǎn)的查詢(xún),查詢(xún)后將text的下一個(gè)節(jié)點(diǎn)指向text下一個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)即可完成節(jié)點(diǎn)的刪除。
func DelectNode(hero *HeroNode, id int) {
text := hero
flag := false
for {
if text.next == nil {
break
} else if text.next.no == id {
//說(shuō)明找到了
flag = true
break
}
text = text.next
}
if flag {
text.next = text.next.next
} else {
fmt.Println("刪除id不存在", id)
}
}ShowNode方法,實(shí)現(xiàn)顯示鏈表中的節(jié)點(diǎn)。先判斷鏈表是否為空鏈表然后進(jìn)行鏈表的打印輸出,直到鏈表為空。
func ShowNode(head *HeroNode) {
// 創(chuàng)建一個(gè)輔助節(jié)點(diǎn)
text := head
// 判斷是否為空鏈表
if text.next == nil {
fmt.Println("空鏈表")
return
}
for {
fmt.Printf("[%d ,%s ]==>", text.next.no, text.next.name)
text = text.next
if text.next == nil {
break
}
}
}主函數(shù)。定義了一個(gè)根節(jié)點(diǎn)head,定義了5個(gè)要添加的節(jié)點(diǎn),并將他們按照順序添加,之后打印顯示出整個(gè)鏈表,然后刪除掉節(jié)點(diǎn)id為"1"的數(shù)據(jù),并再次打印顯示鏈表。
func main() {
// 創(chuàng)建根節(jié)點(diǎn)
head := &HeroNode{}
hero1 := &HeroNode{
no: 1,
name: "張明",
}
hero2 := &HeroNode{
no: 2,
name: "李華",
}
hero3 := &HeroNode{
no: 3,
name: "王五",
}
hero4 := &HeroNode{
no: 4,
name: "張三",
}
hero5 := &HeroNode{
no: 5,
name: "花花",
}
InputNode2(head, hero1)
InputNode2(head, hero2)
InputNode2(head, hero3)
InputNode2(head, hero4)
InputNode2(head, hero5)
ShowNode(head)
fmt.Println()
DelectNode(head, 1)
ShowNode(head)
}整體代碼的實(shí)現(xiàn)

以上就是Golang使用切片實(shí)現(xiàn)單鏈表的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Golang切片單鏈表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解
這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
golang中單機(jī)鎖的具體實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了golang中單機(jī)鎖的具體實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
Go Module依賴(lài)管理的實(shí)現(xiàn)
Go Module是Go語(yǔ)言的官方依賴(lài)管理解決方案,其提供了一種簡(jiǎn)單、可靠的方式來(lái)管理項(xiàng)目的依賴(lài)關(guān)系,本文主要介紹了Go Module依賴(lài)管理的實(shí)現(xiàn),感興趣的可以了解一下2024-06-06
詳解Golang如何優(yōu)雅接入多個(gè)遠(yuǎn)程配置中心
這篇文章主要為大家為大家介紹了Golang如何優(yōu)雅接入多個(gè)遠(yuǎn)程配置中心詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
go時(shí)間/時(shí)間戳操作大全(小結(jié))
這篇文章主要介紹了go時(shí)間/時(shí)間戳操作大全,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Golang操作MySql數(shù)據(jù)庫(kù)的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于Golang操作MySql數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題分析
這篇文章主要介紹了關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

