LeetCode刷题复盘笔记—206. 反转链表

题目:206. 反转链表

题目描述:
反转一个单链表。

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

一、双指针

C++版本:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *slow=NULL;
        ListNode *fast=head;
        ListNode *temp;
        while(fast!=NULL){
            temp=fast->next;
            fast->next=slow;
            slow=fast;
            fast=temp;
        }
        return slow;
    }
};

Python版本:

class Solution(object):
    def reverseList(self, head):
        fast=head
        slow=None
        while fast!=None:
            temp=fast.next
            fast.next=slow
            slow=fast
            fast=temp
        return slow

二、递归

C++版本:

class Solution {
public:
    ListNode* recursive(ListNode* slow,ListNode* fast){
        ListNode *temp;
        if(fast==NULL) return slow;
        temp=fast->next;
        fast->next=slow;
        // 可以和双指针法的代码进行对比,如下递归的写法,其实就是做了这两步
        // slow=fast;
        // fast=temp;
        return recursive(fast,temp);
    }
    ListNode* reverseList(ListNode* head) {
        return recursive(NULL,head);
    }
};

Python版本:

class Solution(object):
    def reverseList(self, head):
        def recursive(slow,fast):
            if fast==None:
                return slow
            temp=fast.next
            fast.next=slow
            return recursive(fast,temp)
        return recursive(None,head)   

总结

1.迭代中循环体中变量的更新操作往往对应于递归调用自身函数里传参

2.C++中的NULL对应于Python中None


欢迎大家扫码关注本人公众号:编程复盘与思考随笔

(关注后可以免费获得本人在csdn发布的资源源码)

公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Al资料站与复盘笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值