栈与队列不同的是,栈是先进后出,队列是先进先出。所以在弹出元素时,有不同的地方
package main
import "fmt"
//Student is a test struct
type Student struct {
idnum int
Next *Student
}
func push(student *Student, dis []int) bool {
temp := student//设置临时指针
for {
if temp.Next != nil {//遍历当next不为空时,进行循环
temp = temp.Next
} else {
break//一旦next为空则此节点为最后一个节点,退出循环
}
}
for _, num := range dis {//遍历数组,将每一个数组的值加入节点
node := Student{idnum: num, Next: nil}//由于next字段为下一个节点的地址,所以目前为空
temp.Next = &node,将原链表的节点的next值换为当前创建的实例
temp = &node//将临时地址换为此次创建的节点,进行循环
}
return true
}
func pop(student *Student) (bool, int, *Student) {
if student == nil {//如果为空链表,则返回false
return false, 0, student
}
temp := student.idnum//将第一个元素返回到临时变量
student = student.Next//将首节点改变,改编为原链表的第二个节点
return true, temp, student//进行返回,true ,元素值 ,和首节点
}
func main() {
stu := Student{0, nil}
push(&stu, []int{1, 2, 3, 4, 5, 6, 7, 8})
ok, index, head := pop(&stu)
if ok {
fmt.Println("first node is ", index)
}
for head.Next != nil {//确定是否第一个元素弹出
fmt.Println(head.idnum)
head = head.Next
}
}