一、问题描述
二、思路
采用头插法先逆置链表,然后依次遍历链表节点。
注意考虑链表的边界条件。
三、代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
vector<int> vec;
if(head == NULL)
return vec;
struct ListNode *cur = head;
struct ListNode *prev = NULL;
struct ListNode *phead = NULL;
if(head-> next == NULL){
vec.push_back(head -> val);
return vec;
}
while(cur){
struct ListNode *nex = cur -> next;
cur -> next = prev;
if(nex == NULL) break;
prev = cur;
cur = nex;
}
phead = cur;
while(cur){
vec.push_back(cur -> val);
cur = cur -> next;
}
return vec;
}
};