EE本科0基础刷leetcode的学习历程(2)

Leetcode 206 反转链表

题目描述:
给定一个链表1->2->3->4->5,要求反转成5->4->3->2->1
思路:
我第一反应是递归,因为使用迭代的话感觉会很困难,但是递归的话就很轻松,直接层层递归下去,最后处理一个两节点的反转问题就行了;
解法一:(使用递归)

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head
        new_head = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return new_head

递归的 思路:
先把问题化简到只处理两个节点的问题,然后最关键的步骤是将head.next.next = head,并且head.next = None
之后return new_head就把这个任务完成了,简简单单~

解法二(迭代法):
迭代法就有些难度了。
我首先有了这样一种想法,就是对于每两个挨着的节点a->b
直接把b的next指向a不就完事了,然后再把这两个节点移到后面两个节点上。
但是后面c已经和b失去联系了!所以这方法好像不太行,但是又一想,加一个临时变量记录下来不就完事了,所以开干!

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev=None
        curr=head
        while curr:
            nex=curr.next
            curr.next = prev
            prev= curr
            curr= nex
        return prev

这里小伙伴可能会想:在C语言中,这节点是要定义的啊,咋在这python里就不是需要定义的了?
不好意思,python就是这么牛逼,直接等于就行,面向对象的编程就是这么轻松容易。
好了,今天的题就到此为止咯,希望我能坚持下来,为大家找工作奠定一个轻松的路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值