1

反转链表

描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围:0 ≤ n ≤ 1000
要求:空间复杂度O(1),时间复杂度O(n), 如当输入链表{1,2, 3}时,经反转,原链表变为{3, 2, 1},所以对应输出为{3,2,1}.以上转换过程如下图所示:

实例1:

输入:{1,2,3}
返回值:{3,2,1}

实例2:

输入:{}
返回值:{}
说明:空链表则输出空

分析:

单链表的定义如下:

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

首先判断当前节点和下一个节点是否为NULL,尤其是第二个节点,如果第二个节点是NULL,则返回当前节点,那么,使用递归函数,参数为head.next,也就是说链表值会一直往后传递,直到最后一个节点,此时因为head.next为NULL,返回当前节点。
代码:

class Solution:
  def reverseList(self, head: ListNode) -> ListNode:
     if not head:
       return None
     if not head.next:
       return head
     headNode = self.reverseList(head.next)
     head.next.next = head
     head.next = None
     return headNone
posted @ 2024-03-18 14:25  Bonne_chance  阅读(13)  评论(0编辑  收藏  举报
1