反转链表
描述
给定一个单链表的头结点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