[LeetCode]206.反转链表

反转一个单链表。

示例:

输入: 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大佬  @王尼玛  的解释

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

 

posted @ 2021-04-13 12:04  noob_stu  阅读(64)  评论(0)    收藏  举报