输入一个链表,从尾到头打印链表每个节点的值。
可以用库函数解题。每次在vector的头部插入即可,没什么技术含量。代码如下:
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
vector<int> result;
while(head!=NULL){
result.insert(result.begin(),head->val);
head=head->next;
}
return result;
}
};
其实这是个链表反序的问题,主要在于处理单链表指针的修改。用三个相邻指针来处理链表的反序。以中间的指针为基准,负责指针的修改,前后两个指针主要用于前后节点的定位。代码如下:
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
ListNode *p,*q, *t;
p=NULL;
q=head;
while(q!=NULL){
t=q->next;
q->next=p;
p=q;
q=t;
}
vector<int> result;
while(p!=NULL){
result.push_back(p->val);
p=p->next;
}
return result;
}
};