翻转链表值

140 阅读1分钟

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

题目链接

方法一

使用栈将链表的值压栈,再弹出来传给ArrayList。

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        stack<int> Stack; 
        vector<int> ArrayList;
        ListNode *p = head;
        while(p){
            Stack.push(p ->val);
            p = p->next;
        }
        while(!Stack.empty()){
            ArrayList.push_back(Stack.top());
            Stack.pop();
        }
        return ArrayList;
        
    }
};

方法二

使用数组翻转,C++有自带的翻转函数。

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> ArrayList;
        ListNode *p = head;
        while(p){
            ArrayList.push_back(p ->val);
            p = p->next;
        }
        //reverse(Array.begin(),Array.end());  //C++自带函数
        int i=0,j=ArrayList.size()-1,temp;
        while(i<j){
            temp = ArrayList[i];
            ArrayList[i++] = ArrayList[j];
            ArrayList[j--] = temp;
        }
        return ArrayList;
        
    }
};

方法三

使用递归。

class Solution {
public:
    vector<int> ArrayList;
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode *p = NULL;
        p = head;
        if(p){
            if(p ->next)
                printListFromTailToHead(p ->next);
            ArrayList.push_back(p ->val);
        }   
        return ArrayList;      
    }
};