“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情”
4>逆序打印一个单链表
思路分析:
方法1:先将单链表翻转一下,然后直接输出就可以了
问题:这样会破坏原来表的表结构(不建议使用)
方法2:利用栈结构,将各个节点存入栈,通过栈先进后出的特点,来实现逆序打印的效果
先学习一下栈,栈(stack)
基本介绍
是一个先入后出的有序列表,栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另—端为固定的一端,称为栈底(Bottom)。
案例:将三个字符型的数据添加到栈里并进行输出
代码实现:
// 栈的基本使用,首先指定一个栈的类型
Stack<String> stack = new Stack<>();
//入栈
stack.add("第1个");
stack.add("第2个");
stack.add("第3个");
//出栈
while (stack.size()>0) {//size:判断栈的长度
//pop:将栈顶数据取出
System.out.println(stack.pop());
}
}
然后再来实现从尾到头打印整个链表整个单链表得到功能
if (head.next==null) {
//空链表
return;
}
//创建一个栈
Stack<HeroNode> stack = new Stack<>();
HeroNode cur=head.next; //帮助遍历链表
//将链表的值压入栈
while (cur!=null) {
stack.add(cur);
cur=cur.next;//让next后移
}
//将栈的值进行输出
while (stack.size()>0) {
System.out.println(stack.pop());
}
}
单链表特点总结:
1.节点只能从前往后进行查询
2. 当要删除节点时,要先找到链表前的节点,更新前一个节点next域,然后再将节点删除,不能自我进行删除
而以上总结的由双向链表可以进行优化