剑指offer:3.从尾到头打印链表

Posted by 尹傲雄 on April 5, 2019   

题目

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。牛客网oj地址

样例

输入:[2, 3, 5]
返回:[5, 3, 2]

解题思路

这道题的解题思路挺多了,可以顺序把链表放入数组中然后再调用reverse函数反转一下返回;可以递归逆序将结果插入数组然后直接返回;可以翻转链表然后循环放入数组最后返回。

//解法一
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> result;
        while(head){
            result.push_back(head->val);
            head=head->next;
        }
        reverse(result.begin(),result.end());
        return result;
    }
};
//解法二
class Solution {
private:
    vector<int> result;
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        if(head){
            if(head->next){
                printListFromTailToHead(head->next);
            }
            result.push_back(head->val);
        }
        return result;
    }
};
//解法三
class Solution {
public:
    vector<int> printListFromTailToHead(RandomListNode* head) {
        unsigned long length=0;
        RandomListNode * pre= nullptr;
        while (head!= nullptr){
            RandomListNode * temp=head;
            head=head->next;
            temp->next=pre;
            pre=temp;
            ++length;
        }
        vector<int> result(length);
        unsigned long index=0;
        head=pre;
        while (head!= nullptr){
            result[index++]=head->label;
            head=head->next;
        }
        return result;
    }
};