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;
}
};
京公网安备 11010502036488号