Leetcode 系列 | 反转链表

点击上方“算法猿的成长”,选择“加为星标”

第一时间关注 AI 和 Python 知识

最近会更新一个 leetcode 的刷题系列,每次更新一道题目,并且通过画图辅助介绍自己的解题思路,大家如果有更好的解题思路也欢迎在文末留言,或者公众号后台回复,也可以添加我微信,进行交流,谢谢!

题目 | 206_Reverse_Linked_List

链接 | https://leetcode.com/problems/reverse-linked-list/

题目

给定一个链表,反转并输出结果。

示例

Input: 1->2->3->4->5->NULL

思路

反转一个单链表,首先肯定需要遍历这个单链表,在遍历的时候就希望修改当前结点的 next 指针,指向其前一个结点,因此肯定需要一个保存前一个结点的变量,也就是反转后链表的头部指针。

实现的思路应该是这样的:

  1. 首先定义一个 prev 保存前一个结点,curr 保存当前结点,然后还有一个 nxt 保存下一个结点,其中 prev 就是最终的反转链表的头结点;

  2. 先让 nxt 保存下一个结点;

  3. 然后改变 curr 的 next 指针,指向前一个结点,即 prev ;

  4. 接着,让 prev = curr ;

  5. 最后,就是让 curr = nxt,指向下一个结点

  6. 重复 2-5 步,直到当前结点为空。

下图展示了上述几个步骤的过程:

640?wx_fmt=png
640?wx_fmt=png
实现

方法1

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

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

方法2:更加简洁的版本

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        reversed_head = None
        current = head
        while current:
            reversed_head, reversed_head.next, current = current, reversed_head, current.next
        return reversed_head

github地址:

https://github.com/ccc013/DataStructe-Algorithms_Study/blob/master/Python/Leetcodes/206_Reverse_Linked_List.py


留言时间

640?wx_fmt=png

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

640?wx_fmt=png

如果觉得不错,在看、转发就是对小编的一个支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

spearhead_cai

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

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

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

打赏作者

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

抵扣说明:

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

余额充值