最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

golang 實(shí)現(xiàn)鏈表爽不爽?

2023-02-27 22:52 作者:阿兵云原生  | 我要投稿

猶記得剛學(xué) C 語(yǔ)言的時(shí)候,學(xué)到指針這一章,就會(huì)有讓我們寫(xiě)鏈表的需求,頭插法,尾插法,翻轉(zhuǎn)鏈表,合并鏈表,約瑟夫環(huán)等等


學(xué)的不亦樂(lè)乎,但是 對(duì)于指針剛學(xué)的時(shí)候,真是摸不著腦殼,不知道 xdm 會(huì)有這種感受嗎,**動(dòng)不動(dòng)就段錯(cuò)誤**


**今天,我們來(lái)看看 golang? 寫(xiě)鏈表是有多爽**


思路大概是這樣的:


- 這里我們簡(jiǎn)單寫(xiě),就不寫(xiě)循環(huán)鏈表了

- 需要一個(gè)鏈表結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體得有頭指針,有尾指針

- 需要一個(gè)節(jié)點(diǎn)的結(jié)構(gòu)體,這個(gè)里面有節(jié)點(diǎn)的數(shù)據(jù),節(jié)點(diǎn)的下一個(gè)指針

- 我們這就來(lái)實(shí)現(xiàn) **頭插法** 和 **尾插法**吧


## 定義數(shù)據(jù)結(jié)構(gòu)


- 定義鏈表結(jié)構(gòu)


```go

type MyList struct {

? ? head *ListNode

? ? tail *ListNode

}

```


- 定義節(jié)點(diǎn)結(jié)構(gòu)


```go

type ListNode struct {

? ? num int

? ? next * ListNode

}

```


## 實(shí)現(xiàn)頭插法


所謂鏈表,就像排隊(duì)一樣,隊(duì)員和隊(duì)員之間用線(xiàn)連起來(lái),但是這個(gè)線(xiàn)是有一個(gè)明確方向的,**頭插法,就是從鏈表頭插入元素,新元素成為頭**


```go

func (list *MyList) HeadInsert(num int) {

// 初始化一個(gè)節(jié)點(diǎn),填入數(shù)據(jù),和下一個(gè)指針指向 空

node := &ListNode{

num:? num,

next: nil,

}

// 判斷尾巴 和 頭都是空,那么說(shuō)明這一次是第 一個(gè)節(jié)點(diǎn),頭和尾都指向這個(gè)節(jié)點(diǎn)即可

if list.tail == nil && list.head == nil {

list.tail = node

list.head = node

return

}

// 頭插,從頭插入

node.next = list.head

list.head = node

}

```


## 實(shí)現(xiàn)尾插法


**尾插法就是從鏈表尾巴插入元素,新元素成為尾巴**


```go

func (list *MyList) TailInsert(num int) {

// 初始化一個(gè)節(jié)點(diǎn),填入數(shù)據(jù),和下一個(gè)指針指向 空

node := &ListNode{

num:? num,

next: nil,

}

// 判斷尾巴 和 頭都是空,那么說(shuō)明這一次是第 一個(gè)節(jié)點(diǎn),頭和尾都指向這個(gè)節(jié)點(diǎn)即可

if list.tail == nil && list.head == nil {

list.tail = node

list.head = node

return

}


// 尾插,從尾插入

list.tail.next = node

list.tail = node

}

```


看到上述寫(xiě)的尾插法和頭插法是不是寫(xiě)法很類(lèi)似,其實(shí)就是后面的幾行代碼邏輯不一樣而已,原理都是一樣的


go 里面無(wú)論是使用指針,還是使用結(jié)構(gòu)體,都是使用 `.` ,而不像 C 里面使用 `->`


## 遍歷鏈表


遍歷鏈表就非常簡(jiǎn)單了,一個(gè)一個(gè)打出來(lái)就可以了


```go

func (list *MyList) PrintList() {

if list == nil{

fmt.Println("list is nil")

return

}


tmp := list.head


for tmp != nil{

fmt.Println(tmp.num)

tmp = tmp.next

}

}


```


## 聯(lián)合上述方法一起跑一遍


我們聯(lián)合上述的代碼,拼拼湊湊來(lái)實(shí)現(xiàn)我們的鏈表


- (頭插或者尾插)插入 10 個(gè)數(shù)據(jù)

- 遍歷一下鏈表


```go

func main() {

// 插入 10 個(gè)數(shù)

l := MyList{}

for i:=0;i<10;i++{

l.HeadInsert(i)

}


l.PrintList()

}

```


**看完的兄弟們是什么感受,有沒(méi)有覺(jué)得使用 golang 寫(xiě)鏈表真的是非常簡(jiǎn)單的事情,當(dāng)然鏈表的思想還是和 C 是一樣一樣的,只不過(guò) 用 golang 來(lái)實(shí)現(xiàn)真的太方便了**




## 歡迎點(diǎn)贊,關(guān)注,收藏


朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力


![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/97eedfade9134b669f0fe40cd73d2cd5~tplv-k3u1fbpfcp-zoom-1.image)


好了,本次就到這里


技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。


我是**阿兵云原生**,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~?


golang 實(shí)現(xiàn)鏈表爽不爽?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
钟山县| 临沂市| 金阳县| 白银市| 定边县| 咸宁市| 买车| 济阳县| 武胜县| 独山县| 抚宁县| 个旧市| 滁州市| 岐山县| 瓦房店市| 台州市| 武安市| 黎平县| 社旗县| 柳州市| 铜陵市| 虹口区| 特克斯县| 航空| 高台县| 乌苏市| 兴国县| 青浦区| 新河县| 封丘县| 鲁山县| 临江市| 镇宁| 祁门县| 黄山市| 潜山县| 农安县| 都安| 台湾省| 宾川县| 枣强县|