天天看點

##劍指offer##JZ03從尾到頭列印連結清單

題目

輸入一個連結清單,按連結清單從尾到頭的順序傳回一個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的後邊。

##劍指offer##JZ03從尾到頭列印連結清單
// 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;
    }