OJ题目描述
输入一个链表,从尾到头打印链表每个节点的值。
代码:
/**
* 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;
p2 = p1->next;
p1->next = NULL;
//如果是单结点链表;
if(p1 == NULL) {
out[0] = p1->val;
return out;
}
//非单节点列表;
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
//只有两个节点;
if(p3 == NULL) {
out[0] = p1->val;
p2 = p1->next;
out[1] = p2->val;
return out;
}
//有三个或以上节点;
while(p3 != NULL) {
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
//现在p1指向新链表头;
int i = 0;
while(p1 != NULL) {
out[i++] = p1->val;
p1 = p1->next;
}
return out;
}
};
运行结果:
段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起