package main
import "fmt"
type Node struct {
data int
next *Node
}
//尾插法
func InsertToTail(headnode *Node, newNode *Node) {
temp := headnode
for {
if temp.next == nil {
break
}
temp = temp.next //相当于是temp的下一个节点的地址给了temp,此时temp指向下一个
}
temp.next = newNode
}
//头插法
func InsertToHead(headnode *Node, newNode *Node) {
temp := headnode
if temp.next == nil {
//代表所插入的元素是第一个元素
temp.next = newNode
} else {
newNode.next = temp.next
temp.next = newNode
}
}
func PrintList(head *Node) {
temp := head
for {
fmt.Printf("->%d", temp.data)
if temp.next == nil {
break
}
temp = temp.next
}
}
func GetNode(x int) *Node {
return &Node{
data: x,
next: nil,
}
}
func main() {
//定义一个头节点
headNode := &Node{} //初始化一个空节点;这里是有地址的,并非是头指针;
var head *Node //这中形式是头指针,此时是空指针,不指向任何地址
fmt.Printf("%p\n", head)
InsertToTail(headNode, GetNode(2))
InsertToTail(headNode, GetNode(3))
InsertToTail(headNode, GetNode(4))
InsertToTail(headNode, GetNode(5))
InsertToTail(headNode, GetNode(6))
InsertToHead(headNode, GetNode(7))
InsertToHead(headNode, GetNode(8))
InsertToHead(headNode, GetNode(9))
PrintList(headNode.next) //去掉头节点,头节点只是辅助
}
关键点在于:
- 牢记指针是地址
- 体会temp指针的作用