赞
踩
一开始直接在力扣上过的,没啥问题
- #双指针
- # Definition for singly-linked list.
- class ListNode:
- def __init__(self, val=0, next=None):
- self.val = val
- self.next = next
-
- class Solution:
- def reverseList(self, head: ListNode) -> ListNode:
- cur = head
- pre = None
- while(cur!=None):
- temp = cur.next # 保存一下 cur的下一个节点,因为接下来要改变cur->next
- cur.next = pre #反转
- #更新pre、cur指针
- pre = cur
- cur = temp
- return pre

但是在pycharm上报错 'list' object has no attribute 'next'
这是因为在IDE上传参的形式还是 list,力扣是通过接口将我们传入的list转化成了 ListNode 了。
我们应该重写ListNode这个类
- class ListNode:
- def __init__(self,val,next=None):
- if isinstance(val,int):# 判断val的类型是否为整数
- self.val = val
- self.next = None
- elif isinstance(val,list):# 判断val的类型是否为列表
- self.val = val[0]#先把第0个值赋给第0个节点
- self.next = None
- head = self# 将self传给head,即头指针,现在头指针已经是指向第0个节点
- for i in range(1,len(val)):# 便利列表
- node = ListNode(val[i])# 将ListNode实例化,并存储列表的第i个值,作为节点node
- head.next = node# 临时头指针的next指向第i个节点
- head = head.next# 相当于临时头指针指向第i个节点
- #下一个循环中就可以继续连接下一个列表元素,并再次更新头指针
-
-
- class Solution:
- def reverseList(self, head: ListNode) -> ListNode:
- #用来记录上一个节点,最开始指向None
- prev = None
- #保存当前的链表,最开始指向的是头节点
- curr = head
- while curr != None:# 当curr指向空时,结束循环,curr最开始是指向头指针的
- #保存后一个节点,
- temp = curr.next
- #改变节点的指向,反转链表
- curr.next = prev
- prev = curr
- #继续处理后面的链表
- curr = temp
- return prev
-
- l = [1,2,3,4,5]
- list_node = ListNode(l)
- obj = Solution()
- reve_list_node = obj.reverseList(list_node)
- while reve_list_node:
- print(reve_list_node.val)
- reve_list_node = reve_list_node.next

输出的结果:
- D:\Anaconda3\python.exe C:/Users/12549/Desktop/likou/206.py
- 5
- 4
- 3
- 2
- 1
-
- Process finished with exit code 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。