[TOC]
1. 题目描述
描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入: {1,2,3} 复制 返回值: {3,2,1}
2. 解题思路
- 思路1, 递归反转
处理完成后内部传出头指针, 然后将当前节点挂接到自己的子节点上面;
- 思路2, 缓存方案
好处是不会因递归深度而爆栈, 用vector存储所有节点, 然后从后往前遍历重新拼接即可;
PS: 实际方案选择, 可以根据题目要求, 和自己的习惯选择实现起来最快, 或者 出题人要求的算法来写代码;
3. 详细代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == nullptr) {
return pHead;
}
ListNode* head = pHead->next;
vector<ListNode*> nodes{pHead};
while (head) {
nodes.push_back(head);
head = head->next;
}
for (int i = nodes.size()-1; i > 0; i--) {
nodes[i]->next = nodes[i-1];
}
nodes[0]->next = nullptr;
return nodes.back();
}
}; 4. 运行结果

京公网安备 11010502036488号