链表的逆序就是剑指offer中从尾到头打印链表
不难想出就是利用栈的使用,从链表的头部开始依次将元素放入栈中,然后遍历结束后,将栈中的元素全部出栈,即为逆序,让我们看看代码实现
因为go中不提供栈,所有我下面用切片代替,建议大家练习时,可以用栈实现
func PrintList(node *ListNode){
res:=[]int{}
if node==nil{
return
}
for node!=nil{
res=append(res,node.Val)
node=node.Next
}
for i:=len(res)-1;i>=0;i--{
fmt.Println(res[i])
}
}
有的同学可能说了,没有别的办法吗,当然有了,别忘了栈的思想是可以递归实现的,递归到最后一个元素后,返回打印这个节点,看看代码
func printList(node *ListNode){
if node==nil{
return
}
if node.Next==nil{
fmt.Println(node.Val)
return
}
printList(node.Next)
fmt.Println(node.Val)
}
使用递归,可以很明显看出代码确实很简洁,但是使用这个方法不一定就好,当一个链表非常大时,可想递归的深度非常可怕,没有使用栈的鲁棒性更好。