力扣206题目:反转链表,使用的是常规的解题思路,但是输出不正确,请问这边有什么错误呢
```python
class Node(object):
def __init__(self, value=None, next=None):
self.value = value
self.next = next
class linkedList(object):
def __init__(self):
self.head = Node() # 创建头指针结点
self.length = 0 # 初始链表长度,头指针节点不计入长度
def __len__(self): # 重写特殊方法返回self.length
return self.length
def head_insert(self, value): # 链表头部插入
node = Node(value)
if self.head.next == None:
self.head.next = node
node.next = None
else:
# 插入元素指针域指向原head元素
tmp_head = self.head.next # 原头指针节点存储到tmp_head
self.head.next = node # 新head指针指向node
node.next = tmp_head # 新插入节点指向原头指针节点
self.length += 1
def append(self, value): # 链表尾部添加结点
# 创建新插入的结点对象
node = Node(value)
if self.length == 0:
self.head.next = node # 只有一个节点,指针指向自己
else:
curnode = self.head.next # 变量curnode存放指针
while curnode.next != None:
curnode = curnode.next
curnode.next = node # 当为最后一个节点时,指针指向新插入节点
self.length += 1
def print_element(self):
cur = self.head
while cur:
print(cur.value)
cur = cur.next
dummy_node = Node(-1)
L = linkedList()
L.head = dummy_node
nums = [1, 2, 3, 4]
for i in range(len(nums)):
L.append(nums[i])
L.print_element()
if L.length == 2:
print('无需反转')
q = L.head
print(q.value)
p = q.next
print(p.value)
while p:
temp = p.next
print('temp:')
# print(temp.value)
p.next = q
print('p:')
# print(p.value)
q = p
print('q')
# print(q.value)
p = temp
print('p')
# print(p.value)
L.head = q
L.print_element()
```
在反转链表的过程中,最后一个节点的指针没有被更新为 None。
修改后的代码如下:
while p:
temp = p.next
p.next = q
q = p
p = temp
q.next = None # 添加这一行代码,将最后一个节点的指针更新为 None
希望我的回答能够帮到你!
最后,感谢大家的观看,有什么问题都可以在下方评论区评论或者公众号后台回复,看到我就会回复大家!
在这里祝各位健健康康过一个充实的假期!
感谢指出我错误的微信网友: 大异小同 。
本次修改内容:
1. 1-1中的代码,for循环的循环控制 i < target / 2 改为 i <= target
错误情况:当 target == 4 时,target / 2 的值是 2,i 从 2开始,如果 循环控制是:i < target / 2, 则不会进入 for 循环,所以会将 4 误判为素数
2. sqrt 函数的返回值是 double 类型。
将 i <= sqrt(target) 改为 i <= (int)sqrt(target)
sqrt 函数的函数原型:double sqrt(double arg);
2020 - 2 - 24 日修改: