[蓝蓝计算机考研算法]-day5从尾到头打印链表

89 阅读1分钟

题目描述

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。

如输入{1,2,3}的链表如下图:

img

返回一个数组为[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 天,点击查看活动详情