题目描述
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例
输入:{1,2,3}
返回值:[3,2,1]
输入:{67,0,24,58}
返回值:[58,24,0,67]
思路
-
从尾到头打印链表,应该想到用头插法建立单链表,可以实现逆序输出链表中的值。
-
将链表中的值存入动态数组中,遍历输出即可。
具体实现
#include<bits/stdc++.h>
using namespace std;
struct LNode{
int data;
LNode* next;
LNode():data(0),next(nullptr){} //初始化
LNode(int x):data(x),next(nullptr){} //初始化
};
int main(){
int data;
LNode* head = new LNode(); //创建头结点
vector<int> v; // 定义动态数组
while(cin>>data){
LNode* s = new LNode(data); //创建结点
s->next=head->next; //头插法建立单链表!!!
head->next=s;
if(cin.get()=='\n') break; //换行时结束输入
}
while(head->next){ //当头结点的下一个结点存在时,添加
v.push_back(head->next->data); //将链表的值插入动态数组尾部
head=head->next;
}
for(int i=0; i<v.size();i++){
cout<<v[i]<<" "; //遍历输出动态数组
}
return 0;
}
(下边这个输出是用链表输出,与题意不符,仅供参考)
#include<bits/stdc++.h>
using namespace std;
struct LNode{ //链表结点定义
int data;
LNode* next;
LNode():data(0),next(nullptr){} //初始化
LNode(int x):data(x),next(nullptr){}
};
int main(){
int data;
LNode* head = new LNode(); //创建空的头结点
//头插法建立单链表!!!
while(cin>>data){
LNode* s = new LNode(data);
s->next=head->next;
head->next=s;
if(cin.get()=='\n') break;
}
// 输出单链表
LNode* ptr=head->next;
while(ptr){
cout<<ptr->data<<" ";
ptr=ptr->next;
}
return 0;
}
小结
对于链表的一些基本操作,一定要熟悉!
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情