剑指offer-刷题笔记-简单题-JZ6 从尾到头打印链表
题解
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
vector<int> reverseResult;
while(head)
{
result.push_back(head->val);
head = head->next;
}
for (int i = 0;i < result.size();i++)
{
reverseResult.push_back(result[result.size()-1-i]);
}
return reverseResult;
}
};
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
Solution b;
vector<int> result = b.printListFromTailToHead(head);
for (int i = 0;i<result.size();i++)
{
cout<<result[i]<<endl;
}
return true;
}
注意:
如果要使用vector 数组转换,必须要设置一个中间数组,不能直接在原来数组上直接反转,原来的已经被修改
直接操作
for (int i = 0;i < result.size();i++)
{
reverse.push_back(result[result.size()-1-i]);
}
判断链表是否到结尾
两种正确判断方法,一种错误方法
while(head != NULL)
while(head)
while(head—>next != NULL)
自己调试代码,输入样例,定义列表
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
ListNode* head = new ListNode();
head->val = 1;
head->next->val = 2;
head->next->next->val = 3;