一、描述
给定一个单链表的头结点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:
输入:{}
返回值:{}
说明:空链表返回空
二、思维解析图:
三、代码解析:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def ReverseList(self, head: ListNode) -> ListNode:
if head == None:
return None
curr = head
pre = None
while curr:
# 断开链表,要记录后续一个
temp = curr.next
# 当前的next指向前一个
curr.next = pre
# 前一个更新为当前
pre = curr
# 当前更新为刚刚记录的后一个
curr = temp
return pre
'''创建链表'''
def GenerateList(s: list):
p = q = ListNode(0)
for val in s:
p.next = ListNode(val)
p = p.next
return q.next
'''输出链表'''
def PrintList(n: ListNode):
while n:
print(str(n.val) + "-->", end="")
n = n.next
print("")
if __name__ == '__main__':
node = GenerateList([3, 5, 7])
PrintList(node)
PrintList(Solution().ReverseList(node))