/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int>v;
void dg(ListNode* head)
{
if(head==NULL)return;
dg(head->next);
v.push_back(head->val);
}
vector<int> printListFromTailToHead1(ListNode* head) {
dg(head);
return v;
}
vector<int> printListFromTailToHead2(ListNode* head) {
stack<int>s;
vector<int>v;
while(head!=NULL)
{
s.push(head->val);
head=head->next;
}
while(!s.empty())
{
v.push_back(s.top());
s.pop();
}
return v;
}
vector<int> printListFromTailToHead3(ListNode* head) {
vector<int>v;
while(head!=NULL)
{
v.push_back(head->val);
head=head->next;
}
reverse(v.begin(),v.end());
return v;
}
vector<int> printListFromTailToHead4(ListNode* head) {
vector<int>v;
ListNode*p=head;
ListNode*pre=NULL;
while(p)
{
ListNode*pnext=p->next;
p->next=pre;
pre=p;
p=pnext;
}
while(pre)
{
v.push_back(pre->val);
pre=pre->next;
}
return v;
}
vector<int> printListFromTailToHead(ListNode* head) {
vector<int>v;
ListNode*phead=new ListNode(-1);
ListNode*p=head;
while(p)
{
ListNode*pnext=p->next;
p->next=phead->next;
phead->next=p;
p=pnext;
}
phead=phead->next;
while(phead)
{
v.push_back(phead->val);
phead=phead->next;
}
return v;
}
};
从尾到头打印链表(五种方法包括链表翻转、递归、栈、容器逆序)
最新推荐文章于 2020-07-30 10:54:42 发布