📅  最后修改于: 2023-12-03 15:12:22.336000             🧑  作者: Mango
在编写程序的过程中,经常需要操作链表数据结构,其中有时需要将链表反转。本文将介绍一种递归地反向链接列表的简单实现。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
if not head or not head.next:
return head
p = reverseList(head.next)
head.next.next = head
head.next = None
return p
这段代码使用 ListNode
类表示链表节点,并定义 reverseList
函数来实现递归地反向链接列表。
函数 reverseList
接收一个指向链表头节点的指针 head
,并返回反转后的新链表的头节点指针。
递归终止条件是链表为空或者链表只有一个节点,则直接返回该节点。
当链表有多个节点时,递归调用反转剩余部分的链表,并记录返回值为 p
。
将当前节点的 next
指针指向前驱节点,即 head.next.next = head
。
最后将当前节点的 next
指针指向空节点,即 head.next = None
。
返回 p
,即反转后的新链表的头节点指针。
下面是一个简单的示例,说明函数 reverseList
的递归过程。
原链表:1 -> 2 -> 3 -> 4 -> 5 -> None
reverseList(2)
,返回 p
为 5 -> 4 -> 3 -> 2 -> None;next
指向前驱节点 1,即 2 -> 1 -> None;next
指向空,即 1 -> None;p
,即反转后的新链表的头节点指针 5 -> 4 -> 3 -> 2 -> 1 -> None。反转后的新链表:5 -> 4 -> 3 -> 2 -> 1 -> None
本文介绍了一种递归地反向链接列表的简单实现。该方法的时间复杂度为 O(n),空间复杂度为 O(n)。使用该方法可以在不使用额外空间的情况下实现链表的反转。