面试题6-链表倒序输出

题目要求

输入一个链表的头结点,从尾到头打印出每一个节点。

题目解析

思路一:

  • 注意,其中ListNode 是一个自定义的链表节点类型。
  • 分析

利用stack先进后出的性质,将链表所有元素压入栈,完全压入后,再将元素一一取出,即为倒序。

  • 代码段
public static void printListReceverse(ListNode headNode) {
        
        Stack stack = new Stack() ;
        
        while(headNode != null) {
            stack.push(headNode);
            headNode = headNode.getNext() ;
        }
        
        while(!stack.isEmpty()) {
            System.out.println(stack.pop().getData());
        }
        
    }

思路二:

  • 分析

利用递归完成倒序输出
终止条件为当前节点没有下一个节点。即headNode.getNext() == null
利用递归达到最后一个节点处,然后倒序输出。

  • 代码段
public static void printListReceverse1(ListNode headNode) {
        
        if(headNode != null) {
            if(headNode.getNext() != null) {
                printListReceverse1(headNode.getNext()) ;
            }
        }
        
        System.out.println(headNode.getData());
    }
    

测试代码

public static void main(String[] args) {
        
        ListNode node1 = new ListNode() ;
        ListNode node2 = new ListNode() ;
        ListNode node3 = new ListNode() ;
        
        node1.setData(1);
        node2.setData(2);
        node3.setData(3);
        
        node1.setNext(node2);
        node2.setNext(node3);
        
        printListReceverse(node1) ;
        
        System.out.println("----------------------------------------------------");
        
        printListReceverse1(node1) ;
        
    }

运行结果

3
2
1


3
2
1


看完整源码戳源码地址

你可能感兴趣的:(面试题6-链表倒序输出)