1. 程式人生 > >劍指offer5從尾到頭列印連結串列java

劍指offer5從尾到頭列印連結串列java

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實現: