【反转链表】【easy]
前言
估计第一次写leetcode、牛客会遇到和我相同的一些疑问,在这里解答一下:
输入的数据类型是啥意思,定义写在哪里?
输入的数据类型的含义写在代码前方的框里,会写下对于这个类型的定义,包括你可以调用的方式
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
如上方所示,说明你构建结点的方式是传入值x,并且结点存在两个变量,val/next,你只能访问这两个值。
答案
v1版本
class Solution:
def ReverseList(self , head: ListNode) -> ListNode:
if head is None or head.next is None:
return head
myhead = ListNode(head.val)
# cur = myhead
head = head.next
while head:
tmp = ListNode(head.val)
tmp.next = myhead
myhead = tmp
head = head.next
return myhead
评价
- 判断增加head.next 是None的判断进行了提速
- 存在的问题,中间存在一个临时变量,浪费了一些内存。
优化:
def ReverseList(self , head: ListNode) -> ListNode:
if not head or not head.next:
return head
prev = None #创建新链表的头结点
# tmp = None
while head:
tmp = head.next #先把下一个结点存下来
head.next = prev #把当前结点放到新链表前面
prev = head #赋值新链表
head = tmp #处理下一个元素
return prev