链表-从尾部到头打印单链表-4

1、单链表逆转,然后遍历输出

https://blog.csdn.net/qq_43209742/article/details/117489111

 1 //将单链表反转  这里的head含虚拟的头结点
 2 public static void reversetList(HeroNode head) {
 3    //如果当前链表为空,或者只有一个节点,无需反转,直接返回
 4    if(head.next == null || head.next.next == null) {
 5       return ;
 6    }
 7    
 8    //定义一个辅助的指针(变量),帮助我们遍历原来的链表
 9    HeroNode cur = head.next;
10    HeroNode next = null;// 指向当前节点[cur]的下一个节点
11    HeroNode reverseHead = new HeroNode(0, "", "");
12    //遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead 的最前端
13    //动脑筋
14    while(cur != null) {  //如果cur=null,说明已经遍历结束
15       next = cur.next;//先暂时保存当前节点的下一个节点,因为后面需要使用
16       cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
17       reverseHead.next = cur; //将cur 连接到新的链表上
18       cur = next;//让cur后移
19    }
20    //将head.next 指向 reverseHead.next , 实现单链表的反转
21    head.next = reverseHead.next;//注意head才是真正的头,reverseHead只是用来临时当一下头节点
22 }
23 
24 /**
25  * 打印链表的值  这个head没有虚拟头结点
26  * @param head
27  */
28 public static void printList(ListNode head){
29     //定义临时节点
30     ListNode temp=head;
31     while(temp!=null){
32         System.out.println(temp.value);
33         temp=temp.next;
34     }
35 }

 

 

 

2、使用栈,不破坏原来链表的结构 ,利用栈的先进后出的特性。

参靠:https://blog.csdn.net/chengqiuming/article/details/114270842

/**
     * 功能描述:从尾到头打印单链表
     *
     * @param head 头节点
     * @author cakin
     * @date 2021/3/1
     * @description: 可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,就实现了逆序打印的效果
     */
    public static void reversePrint(HeroNode head) {
        if (head.next == null) {
            return; // 空链表,不能打印
        }
        // 创建要给一个栈,将各个节点压入栈
        Stack<HeroNode> stack = new Stack<HeroNode>();
        HeroNode cur = head.next;
        // 将链表的所有节点压入栈
        while (cur != null) {
            stack.push(cur);
            cur = cur.next; // cur后移,这样就可以压入下一个节点
        }
        // 将栈中的节点进行打印,pop 出栈
        while (stack.size() > 0) {
            System.out.println(stack.pop()); // stack的特点是先进后出
        }
    }
}

 

posted @ 2022-04-12 20:14  qmhl开到荼蘼  阅读(18)  评论(0编辑  收藏  举报