zoukankan      html  css  js  c++  java
  • 剑指offer 面试题5 : 从尾到头打印链表

    题目:

      输入一个链表的头结点,从尾到头反过来打印出每个节点的值。链表结点定义如下:    

    struct ListNode {
          int m_nKey;
          ListNode* m_pNext;    
    };
    

    思路:

    通常打印是一个只读操作,我们不希望打印时修改内容,所以这个题目在遍历过程中,不能修改链表的值。逆序打印链表,操作正好符合堆栈的数据结果。

    Java代码实现:

    import java.util.ArrayList;
    import java.util.Stack;
    
    public class Solution {
    
    	public static void main(String[] args) {
    		ListNode listNode = new ListNode(1);
    		ListNode root = listNode;
    		for (int i = 2; i < 5; i++) {
    			listNode.next = new ListNode(i);
    			listNode = listNode.next;
    		}
    
    		new Solution().printListFromTailToHead(root);
    
    		new Solution().printListFromTailToHead2(root);
    	}
    
    	/**
    	 * 非递归实现,借助于栈的数据结构
    	 * 
    	 * @param listNode
    	 * @return
    	 */
    	public void printListFromTailToHead(ListNode listNode) {
    
    		Stack<Integer> stack = new Stack<Integer>();
    		ListNode root = listNode;
    
    		while (root != null) {
    			stack.push(root.val);
    			root = root.next;
    		}
    
    		while (!stack.empty()) {
    			System.out.print(stack.pop() + "  ");
    		}
    		System.out.println("");
    	}
    
    	/**
    	 * 递归实现方式
    	 * 
    	 * @param listNode
    	 * @return
    	 */
    	public void printListFromTailToHead2(ListNode listNode) {
    		if (listNode != null) {
    			if (listNode.next != null) {
    				printListFromTailToHead2(listNode.next);
    			}
    			System.out.print(listNode.val + " ");
    		}
    	}
    }
    
    class ListNode {
    	int val;
    	ListNode next = null;
    
    	ListNode(int val) {
    		this.val = val;
    	}
    }
    

      

    加油
  • 相关阅读:
    手机分辨率对应表
    本地加密解密工具类
    缓存清理的工具类
    Javadoc常见的标记和含义
    Android 禁止进入activity自动弹出键盘
    ListView
    可以展开和收起的的LinearLayout
    Android 编码规范
    ToastUtils
    防微信左滑删除的效果
  • 原文地址:https://www.cnblogs.com/boothsun/p/4862289.html
Copyright © 2011-2022 走看看