LeetCode - 206. 反转链表

206. 反转链表


题目

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

进阶:

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

方法1 - 常规解法

解题思路

  1. 获取当前指针 this_node 与上一个指针 last_node(当头指针指向this_node时,last_node为None)
  2. 记录下一个指针 next_node
  3. 修改 this_node 指向元素 this_node->last_node
  4. 往后遍历元素,使得 this_node = next_node
  5. 直到 this_node 为空,则 last_node 为反转链表的头指针

代码

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        last_node = None
        this_node = head
        while this_node:  # 获取当前指针
            next_node = this_node.next  # 记录下一个node
            this_node.next = last_node  # 修改指针
            last_node, this_node = this_node, next_node  # 往后遍历
            
        return last_node

结果

这种方法速度还是很快滴,窃喜一下下~~~
在这里插入图片描述

方法二 - 递归

解题思路

  1. 若当前元素的 next 非空,则反转 next 对应的链表,并将链表中第一个元素的 next 指向本元素,并将本元素的 next 指向空(本元素为链表结束)
  2. 若 next 为空,返回本身
    递归过程类似下图:
    在这里插入图片描述

代码

class Solution:
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head and head.next:
            next_node = head.next
            rl = self.reverseList(next_node)
            next_node.next = head
            head.next = None
            return rl
            
        return head

结果

由于python对于递归效率不高,所以使用递归实现效率有很大下降,不知道其他语言实现如何。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值