首页 > 其他 > 详细

[LeetCode]206.反转链表

时间:2021-04-13 16:47:54      阅读:10      评论:0      收藏:0      [点我收藏+]

反转一个单链表。

示例:

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

 

1.解题思路

方法一:循环迭代(双指针法)

技术分享图片

①定义双指针cur和pre,一前一后,另外,由于最后我们会让pre.next = cur实现反转,因此我们还需要一个temp指向pre.next

②令pre.next = cur, cur = pre, pre = temp

③循环的终止条件为pre is None

具体代码如下:

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        cur = None
        pre = head
        while pre:
            temp = pre.next
            pre.next = cur
            cur = pre
            pre = temp
        return cur

 

 

方法二:递归函数

想象一下,假设我已经有了一个部分反转好的链表,然后我们要利用反转好的这部分链表将这之前的部分也反转过来。

举个栗子:1->2->  3<-4<-5,后边三个反转好了,那现在就要把2带进来递归。

具体代码如下:

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

技术分享图片技术分享图片

上图LeetCode大佬  @王尼玛  的解释

我看了觉得通俗易懂,于是直接变身拷贝忍者。。

 

[LeetCode]206.反转链表

原文:https://www.cnblogs.com/Souriez/p/14652571.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!