#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
using namespace std;
//链表的反遍历,利用栈
struct ListNode{
int val;
struct ListNode *next;
};
vector<int> print(struct ListNode* head){
vector<int> s;
if(head!=NULL){
if(head->next!=NULL){
print(head->next);
}
cout<<head->val<<" ";
s.push_back(head->val);
head=head->next;
}
return s;
}
int main(){
int n;
ListNode *head;
ListNode *p;
vector<int> vals;
cin>>n;
int val;
cin>>val;
head=(ListNode *)new ListNode;
head->val=val;
head->next=NULL;
p=head;
for(int i=1;i<n;i++){
ListNode *q=(ListNode *)new ListNode;
int val;
cin>>val;
q->val=val;
q->next=NULL;
p->next=q;
p=p->next;
}
vals=print(head);
return 0;
}
利用递归。打印一个节点,这个节点a如果有next节点,则先打印next节点,然后将a节点加入栈中。最后头结点在栈顶,返回栈的时候,栈顶正好是头结点。