题目:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。
递归的版本是看别人写的,只会写迭代,
(>_<)
代码如下所示:
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
// 递归求解
ListNode* reverseList(ListNode* head) {
if (head == nullptr || head->next == nullptr)
return head;
ListNode* p = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return p;
}
//迭代求解
//ListNode* reverseList(ListNode* head) {
// if (head == nullptr || head->next == nullptr)
// return head;
// ListNode* pre = new ListNode(0);
// pre->next = head;
// ListNode* tmp = head;
// while (tmp != nullptr && tmp->next != nullptr) {
// ListNode* start = tmp->next; // 当前需要操作的结点
// pre->next = start;
// tmp->next = start->next;
// start->next = head;
// head = start;
// }
// return pre->next;
//}
};
int main() {
ListNode* p = new ListNode(1);
p->next = new ListNode(2);
p->next->next = new ListNode(3);
p->next->next->next = new ListNode(4);
p->next->next->next->next = new ListNode(5);
ListNode* tmp = (new Solution())->reverseList(p);
while (tmp) {
cout << tmp->val << endl;
tmp = tmp->next;
}
return 0;
}