題目
輸入一個連結清單,按連結清單從尾到頭的順序傳回一個ArrayList。
思路
起初直覺思路是把連結清單進行反轉,但是發現官方解給的是最簡單的方法,把val放到一個數組裡,然後把數組倒叙輸出即可。在面試的時候首要任務還是能夠AC,看來能用簡單的方法還是要首先考慮的最優解。
代碼
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 傳回從尾部到頭部的清單值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
res=[]
while listNode:
res.append(listNode.val)
listNode=listNode.next
return res[::-1]
其他方法
其實這種題一般考察的是對反轉連結清單的掌握程度,在這裡說一個常用的頭結點插入法,建立一個頭結點dummy,每次不斷把待反轉的頭結點p_cur插到res的後邊。

// 2.建立連結清單,頭節點插入法
public ListNode reverseList2(ListNode head) {
ListNode dummy = new ListNode(-1);
ListNode pCur = head;
while (pCur != null) {
ListNode pNex = pCur.next;
pCur.next = dummy.next;
dummy.next = pCur;
pCur = pNex;
}
return dummy.next;
}