1. 题目
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList
2. 做题思路
利用栈具有先进后出的数组组合特性,将数据压入栈中,然后将栈中的数据压入vector中,便组成了一个ArrayList
3. 代码实现
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
using std::vector;
//结构体用来存放数据
typedef struct ListNode
{
int val;
struct ListNode *next;
//ListNode(int x) :val(x), next(NULL){}//表示给Val赋值,下一个指针为NULL
}NODE;
NODE* init();
void insertData(NODE* head,int data);
//按链表值从尾到头的顺序返回一个ArrayList
vector<int> printListFromTailToHead(ListNode* head)
{
vector <int> result;
stack<int> arr;
ListNode* p = head;
while (p != NULL)
{
arr.push(p->val);
p = p->next;
}
int len = arr.size();
for (int i = 0; i<len; i++)
{
result.push_back(arr.top());//不用加下标压入元素的原因,见下一行
arr.pop();//栈弹出元素,从而不用把栈的arr用下标表示,而且vector的push_back每次压入元素又可以自动压入元素
}
return result;
}
//输入数据检测printListFromTailToHead函数是否成功
void testFun()
{
struct ListNode* MyList;
vector<int> MyArr;
MyList = init();
for (int i = 0; i < 10; ++i)
{
i nsertData(MyList, i);
}
MyArr = printListFromTailToHead(MyList);
for (int i = 0; i < MyArr.size(); ++i)
printf("%d", MyArr[i]);
}
int main()
{
testFun();
cin.get();
return 0;
}
NODE* init()
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p->next = NULL;
return p;
}
void insertData(NODE* head, int data)
{
//头插的方式给链表插入数据
NODE* p = (NODE*)malloc(sizeof(NODE));
p->val=data;
p->next = head->next;
head->next = p;
}