题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路
依次从头取出链表上的节点,将遍历的节点依次插入到向量的首部,从而实现链表的翻转。
笔记:
1.vector使用:
1.声明与定义:vector<int> ivec;
2.头插入vector:ivec.insert(ivec.begin(), 6)
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> tmpvct; //*
while(head!=NULL){
tmpvct.insert(tmpvct.begin(),head->val); //*
head = head->next;
}
return tmpvct;
}
};
思路2
使用一个stack,从头遍历一遍来链表,存入stack中。开始从top()读取数据,pop()。
笔记:
1.stack的使用:
1.声明与定义:std:stack<ListNode*> pstack;
2.添加入stack: pstack.push(phead);
3.获取stack的top: ListNode* ptmp = pstack.top();
4.stack退元素:stack.pop();
Code:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
std:stack<ListNode*> nodestack;
ListNode* phead = head;
vector<int> newlist;
while(phead){
nodestack.push(phead);
phead = phead->next;
}
while(!nodestack.empty()){
ListNode* ptmp = nodestack.top();
newlist.push_back(ptmp->val);
nodestack.pop();
}
return newlist;
}
};