当前位置: 代码迷 >> 综合 >> JAVA 使用栈从尾到头打印单向链表
  详细解决方案

JAVA 使用栈从尾到头打印单向链表

热度:45   发布时间:2024-02-11 01:23:14.0

场景:使用栈,将单向链表逆向打印

 

实现分析:

实现方式有很多,为了不破坏原单向链表的结构,这里采用栈实现。

首先将单链表的各个节点分别加入到栈中。

然后利用栈先进后出的特性,直接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}