package main
import (
"fmt"
)
func main() {
head := initList()
printList(head)
reHead := reverseListByDfs(head)
printList(reHead)
reHead = reverseList(reHead)
printList(reHead)
}
type Node struct {
Val int
Next *Node
}
/**
翻转链表
*/
func reverseList(head *Node) *Node {
if head == nil || head.Next == nil {
return head
}
pre := head
for q := head.Next; q != nil; {
tmp := q.Next
q.Next = pre
pre = q
q = tmp
}
head.Next = nil
return pre
}
/**
递归反转链表
*/
func reverseListByDfs(pre *Node) *Node {
if pre.Next == nil {
return pre
}
tail := reverseListByDfs(pre.Next)
// tail一直为尾节点
pre.Next.Next = pre
pre.Next = nil
return tail
}
/**
链表初始化
*/
func initList() *Node {
head := new(Node)
p := head
for i:=0; i<5; i++ {
if i == 0 {
p.Val = 0
p.Next = nil
} else {
newNode := &Node{Val:i, Next:nil}
p.Next = newNode
p = p.Next
}
}
return head
}
/**
打印链表
*/
func printList(head *Node) {
for p := head; p != nil; p=p.Next {
fmt.Println(p.Val)
}
}