劍指offer5從尾到頭列印連結串列java
阿新 • • 發佈:2018-12-11
1.用棧來實現,先把listnode.val全部放進自己的棧裡,然後列印棧的值
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> temp = new Stack<Integer>(); ArrayList<Integer> list = new ArrayList<Integer>(); while(listNode!=null){ temp.push(listNode.val); listNode = listNode.next; } while(!temp.isEmpty()){ list.add(temp.pop()); }return list; } }
對於劍指offer給出的另外一種遞迴思路;我先用Python實現了
class ListNode(object): def __init__(self, x): self.val = x self.next = None class Solution(object): def printListFromTailToHead(self, listNode): if (listNode != None): if (listNode.next != None): return self.printListFromTailToHead(listNode.next) +[listNode.val] if (listNode.next == None): return [listNode.val] else: return [] t = ListNode(2) L = t L.next=ListNode(1) L=L.next L.next = ListNode(3) L = L.next L.next = ListNode(4) L = L.next L.next = ListNode(4) S = Solution() print S.printListFromTailToHead(t,[])
不難發現,這是一個遞迴思路,我們可以把這題看成兩部分,第一部分第一個節點用listNode.val表示,第二部分是拍好序的後n-1個節點,我們的printListFromTailToHead(listNode)是逆序整個連結串列,那麼逆序後面n-1個節點就是printListFromTailToHead(listNode.next),把第一個的llistnode節點插入尾部就可以啦!
下面是用java實現: