Leetcode.206.反转链表
https://leetcode-cn.com/problems/reverse-linked-list/
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
这道题的方法有两种分别是双指针法与递归法,在我看来,双指针法比迭代法要好理解一点。
所谓双指针法:设置两个指针令pre指向NULL,令cur指向head。然后在设置一个指针保存cur的下一个指针,令cur的下一个指针指向pre(完成反转),然后再同时移动pre与cur,令pre为cur,cur的下一个元素为cur.就这样的将cur与pre循环往前,当cur为空的时候,循环结束,那时pre刚刚循环到最后一个节点,此时pre就是头节点,所有节点完成了反转
解法一
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode*pre=NULL;
ListNode*cur=head;
ListNode*temp;
while(cur){
temp=cur->next;
cur->next=pre;
pre=cur;
cur=temp;
}
return pre;
}
};
解法二
class Solution {
public:
ListNode*reverse(ListNode*pre,ListNode*cur){
if(cur==NULL)return pre;
ListNode*temp=cur->next;
cur->next=pre;
return reverse(cur,temp);
}
ListNode* reverseList(ListNode* head) {
return reverse(NULL,head);
};