c++
本题考察链表的数据格式理解,以及应用方法,以及vector的一些使用函数,用来了解熟悉语言。
思路一:
读取获得,并利用反转函数
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> ret; while(head){ ret.push_back(head->val); head = head->next; } std::reverse(ret.begin(),ret.end()); return ret; } };
思路2:利用递归,从最后输出
{1,2,3,4}
函数:
------如果是 head 结束了-----返回字符串
------否则:
------------进入(head->next);
------------赋值
------------返回
例如:
head=1 val =1 next =2; 进入函数
head=2 val = 2 next=3; 进入函数
。。。。
head=4 val = next=null 返回 定义的vector--空
------------{}----4----入str; 返回{4}
------------{4}---3----入str; 返回{4,3}
。。。。
------------{4,3,2}---1---入str; 返回{4,3,2,1}
结束
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> ret; if(!head) return ret; ret = printListFromTailToHead(head->next); ret.push_back(head->val); return ret; };
思路3:反转列表,记录节点反向顺序,然后压入向量,输出
需要新建一个链表
head->1->2->3->4->null => null<-1<-2<-3<-4<-*p
pre-> nullprt
cur-> head
next->cur
1: cur=1; next->2 (cur->next) ; cur->pre (1->null) pre=cur=1 cur=next=2; | pre:1->null
2: cur=2; next->3 ; cur->pre (2->1) pre=cur=2 cur=next=3; | pre:2->1->null
4: cur=4; next->null ; cur->pre (4->3) pre=cur=4 cur=next=null | pre:4->3->2->1->null;
结束
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { ListNode* pre = nullptr; //new lsit ListNode* cur = head; //current node ListNode* nex = cur; //next node while(cur){ nex = cur->next; cur->next = pre; pre = cur; cur = nex; } vector<int> ret; while(pre){ ret.push_back(pre->val); pre=pre->next; } return ret; } };