场景:使用栈,将单向链表逆向打印
实现分析:
实现方式有很多,为了不破坏原单向链表的结构,这里采用栈实现。
首先将单链表的各个节点分别加入到栈中。
然后利用栈先进后出的特性,直接pop出栈中的各节点即可。
JAVA 实现带头结点的链表根据节点大小按顺序新增、修改、删除节点 该文章已实现单向链表的创建及遍历等操作。
在此基础上添加方法即可。
代码实现:
//逆向打印链表public void reversePrintSinglelist(HeroNode2 head2){//如果当前链表为空,或者只有一个节点,无需反转,直接返回if(head2.next==null || head2.next.next==null){return;}HeroNode2 current = head2.next;Stack<HeroNode2> stack = new Stack<HeroNode2>();while(current!=null){stack.push(current);current = current.next;}while(stack.size()>0){System.out.println(stack.pop());}}
测试类:
public class SingleLinkedListDemo2 {public static void main(String[] args) {SingleLinkedList2 singleLinkedList = new SingleLinkedList2();HeroNode2 h1 = new HeroNode2(1,"AAA","A");HeroNode2 h2 = new HeroNode2(2,"BBB","B");HeroNode2 h3 = new HeroNode2(3,"CCC","C");HeroNode2 h4 = new HeroNode2(4,"DDD","D");singleLinkedList.addByOrder(h1);singleLinkedList.addByOrder(h3);singleLinkedList.addByOrder(h4);singleLinkedList.addByOrder(h2);singleLinkedList.list();System.out.println("逆向打印链表~~~~~~~~~~~~");singleLinkedList.reversePrintSinglelist(singleLinkedList.getHeadNode());}}
输出结果:
HeroNode{no=1, name='AAA, nickName='A}
HeroNode{no=2, name='BBB, nickName='B}
HeroNode{no=3, name='CCC, nickName='C}
HeroNode{no=4, name='DDD, nickName='D}
逆向打印链表~~~~~~~~~~~~
HeroNode{no=4, name='DDD, nickName='D}
HeroNode{no=3, name='CCC, nickName='C}
HeroNode{no=2, name='BBB, nickName='B}
HeroNode{no=1, name='AAA, nickName='A}