题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:
(1)创建链表(头指针,遍历指针,新节点指针),初始化,读取链表
(2) 怎么使用栈:s.top(),s.push(),s.pop()
(3) 怎么使用 vector<int> a, 插入a.push_back(),访问可以用a[i]
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> a;
stack<int> b;
ListNode *p = head;
while(p!=NULL)
{
b.push(p->val);
p = p->next;
}
while(!b.empty())
{
a.push_back(b.top());
//cout<<b.top()<<endl;
b.pop();
}
return a;
}
int main()
{
ListNode *p1=NULL,*p2=NULL,*head=NULL;
int i,n,v;
cin>>n;//节点个数
for(i=0;i<n;i++)
{
cin>>v;
p2=(ListNode*)malloc(sizeof(ListNode));//为其他保存值的指针开辟空间
p2->val=v;
if(head==NULL)
{
head=p2;//在头指针为空的情况下 把值指针的首地址给首指针
}
else
{
p1->next=p2;
}
p1=p2; //保存首地址后 同时把指针的首地址给与保存地址指针 这样实现了首指针和保存地址的指针一致 //需要保存地址的指针和它内部的指针一致 这样调用next函数才能调用到地址 不然没对象
}
p1->next=NULL; //!!记得将链表尾指针指向NULL
// 读取链表
p2= head;
while(p2!=NULL)
{
cout<<p2->val<<',';
p2 = p2->next;
}
vector<int> tmp = printListFromTailToHead(head);
for(i=0;i<n;i++)
{
cout<<tmp[i]<<' ';
}
return 0;
}