go語言:反轉單鏈表
阿新 • • 發佈:2018-12-08
反轉單鏈表
package main
import "fmt"
type node struct {
value int
nextNode *node
}
func reverseNode(head *node) *node {
// 先宣告兩個變數
// 前一個節點
var preNode *node
preNode = nil
// 後一個節點
nextNode := new(node)
nextNode = nil
for head != nil {
// 儲存頭節點的下一個節點,
nextNode = head.nextNode
// 將頭節點指向前一個節點
head.nextNode = preNode
// 更新前一個節點
preNode = head
// 更新頭節點
head = nextNode
}
return preNode
}
func printNode(head *node) {
for head != nil {
//fmt.Print(head.value, "\t")
fmt.Println(head)
head = head.nextNode
}
fmt.Println()
}
func main() {
node1 := new(node)
node1.value = 1
node2 := new(node)
node2.value = 2
node3 := new(node)
node3.value = 3
node4 := new(node)
node4.value = 4
node1.nextNode = node2
node2.nextNode = node3
node3.nextNode = node4
printNode(node1)
head := reverseNode(node1)
printNode(head)
}
執行結果:
&{1 0xc42000e1f0}
&{2 0xc42000e200}
&{3 0xc42000e210}
&{4 <nil>}
&{4 0xc42000e200}
&{3 0xc42000e1f0}
&{2 0xc42000e1e0}
&{1 <nil>}