/*输入一个链表,从尾到头打印链表每个节点的值。
思路1:反转链表,然后输出*/
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
vector<int> printListFromTailToHead(struct ListNode* head)
{
vector<int> res;
if(NULL == head)
return res;
ListNode *p = NULL;
ListNode *q = head;
ListNode *r = head->next;
while(q)
{
q->next = p;
p = q;
q = r;
if(r)
r = r->next;
}
while(p)
{
res.push_back(p->val);
p = p->next;
}
return res;
}
/*输入一个链表,从尾到头打印链表每个节点的值。
思路2:利用栈,然后输出*/
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
vector<int> printListFromTailToHead(struct ListNode* head)
{
vector<int> res;
if(NULL == head)
return res;
stack<int> TempS;
while(head)
{
TempS.push(head->val);
head = head->next;
}
while(!TempS.empty())
{
res.push_back(TempS.top());
TempS.pop();
}
return res;
}