从头到尾打印链表
程序员文章站
2022-06-05 19:46:17
...
题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路1:利用栈“先进后出”的思想,将链表倒叙返回。从头到尾将链表遍历并入栈,然后,出栈放到数组中。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> value;
ListNode *p=NULL;
p=head;
stack<int>stk;
while(p!=NULL){
stk.push(p->val);
p=p->next;
}
while(!stk.empty()){
value.push_back(stk.top());
stk.pop();
}
return value;
}
};
思路2:先将链表的数值存放到数组中,再将数组倒置。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> value;
ListNode *p=NULL;
p=head;
while(p!=NULL){
value.push_back(p->val);//存放到数组中
p=p->next;
}
int temp=0,i=0,j=value.size()-1;
while(i<j){//将数组倒置
temp=value[j];
value[j]=value[i];
value[i]=temp;
i++;
j--;
}
return value;
}
};
思路3:递归。递归虽然程序简单,不要轻易尝试,容易内存溢出。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> value;
vector<int> printListFromTailToHead(ListNode* head) {
ListNode *p=NULL;
p=head;
if(p!=NULL){
if(p->next!=NULL){//递归条件
printListFromTailToHead(p->next);
}
value.push_back(p->val);
}
return value;
}
};
上一篇: Java反射基础入门,一篇就够啦
下一篇: 一篇文章带你了解CSS基础知识和基本用法