[leetcode]206. 反转链表
206. 反转链表
Difficulty: 简单
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
Solution 1
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *pre = NULL, *cur = head;
while(cur!=NULL){
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
};
思路
两个指针记录前一个和当前指针,初始化pre指针为NULL,作为逆序后的NULL使,后一个cur指针记录当前值,使得cur指向pre即可,之后cur和pre借助一个零时变量向后移动就可以了
solution 2
思路
递归
后记
(2020/07/02)无语死了,今天面试三鹿蛋居然考到这题,结果我已经很久没有回顾这一题了,根本记不得什么解法,第一映像想到递归,但是根本写不出来,于是匆忙中只想到借助栈去解决问题。然后被面试官问有没有不借助栈的解法,他提示用双指针,但是我根本记不住双指针法精髓,写出的代码破绽百出,我的天,这题刷的好郁闷。🤮