單鏈表反轉 遞迴實現 GO語言

2021-09-21 07:41:25 字數 1182 閱讀 6078

鍊錶是一種比較常見的資料結構

單鏈表的反轉用遞迴實現比較簡單,這裡簡單講一下。

首先定義節點

type node struct
下面是反轉遞迴函式,煉表頭比較重要,控制煉表頭不做修改

func reverselist(node *node) *node  else 

}

舉個例子:鍊錶 1->2->3->4->5->6->nil,這是乙個鍊錶,鍊錶反轉應該是6->5->4->3->2->1->nil,這個大家都懂,呼叫上面的函式,一直進入遞迴

假設當前進入的node為5這個節點

//node=5,node.next=6 ,6的next為nil 所以,return 6

//這時再看這3行**

newhead := 6節點 //6為新的煉表頭 之後開始反轉

node.next.next = node 為6,node.next.next=5,這時候鍊錶已經變成 6->5。

node.next = nil // 6->5->nil

需要注意的是node.next 不要以為就是newhead,然後還把node.next.next 替換成newhead.next,這是錯誤的,不然頭指標指向的下乙個節點一直在被替換。

下面貼上完整的測試用**:

package main

import "fmt"

type node struct

func reverselist(node *node) *node else

}func main()

var head *node

head = &node //初始化頭指標

current := head //頭指標為了保持不變,賦值給current當前指標

for i:=1; i", p.value)

p = p.next

} }fmt.printf("nil\n")

head = reverselist(head) //鍊錶反轉

//列印一下

fmt.printf("反轉後的鍊錶:")

p = head

for true else

} fmt.printf("nil\n")

}

單鏈表,以及反轉遞迴實現,

author by zhouwx5 created on by 2019 11 19 desc public class linkednode private void linklist t element private int length 獲取給定索引的值 param index 給定索引 r...

單鏈表反轉(遞迴和非遞迴)

單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 cpp view plain copy typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟...

單鏈表反轉(遞迴和非遞迴)

單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟2 其中注意,鍊錶是以節點後繼為null...