本文主要是介绍从尾到头打印链表(含翻转链表两种方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:vector<int> a;//方法一:递归(自底向上)vector<int> printListFromTailToHead1(ListNode* head) {if(head!=NULL){printListFromTailToHead(head->next);a.push_back(head->val);}return a;}//方法二:栈vector<int> printListFromTailToHead2(ListNode* head) {vector<int>v;stack<int>s;while(head){s.push(head->val);head=head->next;}while(s.size()){v.push_back(s.top());s.pop();}return v;} //方法三:逆序vector<int> printListFromTailToHead3(ListNode* head) {vector<int>v;while(head){v.push_back(head->val);head=head->next;}reverse(v.begin(),v.end());return v;}//方法四:翻转链表1vector<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;} //方法五:翻转链表2vector<int> printListFromTailToHead(ListNode* head) {vector<int>v;ListNode* ahead=new ListNode(-1);ahead->next=head;ListNode*p=NULL;if(head==NULL)return v;while(head->next){p=head->next;head->next=p->next;p->next=ahead->next;ahead->next=p;}head=ahead->next;while(head){v.push_back(head->val);head=head->next;}return v;}
};
这篇关于从尾到头打印链表(含翻转链表两种方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!