从尾到头打印链表
时间限制:1秒 空间限制:32768K
通过比例:18.26%
最佳记录:0 ms|8552K (来自 zzkgo)
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
//先反转链表;
ListNode *p1, *p2, *p3;
vector<int> out;
p1 = head;
//如果是空链表;
if(p1 == NULL) {
return out;
}
//如果是单结点链表;
p2 = p1->next;
p1->next = NULL;
if(p2 == NULL) {
out.push_back(p1->val);
return out;
}
//非单节点列表;
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
//(1)只有两个节点;
if(p3 == NULL) {
out.push_back(p1->val);
p2 = p1->next;
out.push_back(p2->val);
return out;
}
//(2)有三个或以上节点;
while(p3 != NULL) {
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
//现在p1指向新链表头;
while(p1 != NULL) {
out.push_back(p1->val);
p1 = p1->next;
}
return out;
}
};