剑指offer——从尾到头打印链表
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
1.代码实现(Java)
思路一:借助递归实现
1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.ArrayList; 13 public class Solution { 14 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 15 ArrayList<Integer> list=new ArrayList<Integer>(); 16 ListNode mNode=listNode; 17 if(mNode!=null){ 18 if(mNode.next!=null){ 19 list=printListFromTailToHead(mNode.next); 20 } 21 list.add(mNode.val); 22 } 23 return list; 24 } 25 }
思路二:借助栈的“后进先出”
1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.ArrayList; 13 import java.util.Stack; 14 public class Solution { 15 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 16 ArrayList<Integer> mList=new ArrayList<Integer>(); 17 Stack<Integer> mStack=new Stack<Integer>(); 18 ListNode mNode=listNode; 19 while(mNode!=null){ 20 mStack.push(mNode.val); 21 mNode=mNode.next; 22 } 23 while(!mStack.empty()){ 24 mList.add(mStack.pop()); 25 } 26 return mList; 27 } 28 }
思路三:反链表
1 /** 2 * public class ListNode { 3 * int val; 4 * ListNode next = null; 5 * 6 * ListNode(int val) { 7 * this.val = val; 8 * } 9 * } 10 * 11 */ 12 import java.util.ArrayList; 13 import java.util.Stack; 14 public class Solution { 15 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 16 ArrayList<Integer> mList=new ArrayList<Integer>(); 17 ListNode pre=null; 18 ListNode next=null; 19 while(listNode!=null){ 20 next=listNode.next; 21 listNode.next=pre; 22 pre=listNode; 23 listNode=next; 24 } 25 while(pre!=null){ 26 mList.add(pre.val); 27 pre=pre.next; 28 } 29 return mList; 30 } 31 }
posted on 2018-03-18 23:41 Joyce&wang 阅读(116) 评论(0) 收藏 举报
浙公网安备 33010602011771号