python链表反转引发的问题
先附上代码
#节点类
class Node(object):
def __init__(self,data,nNext = None):
self.data = data
self.next = nNext
#链表类
class Chain(object):
def __init__(self):
self.head = None
self.length = 0
#只加一个节点
def append(self,dataOrNode):
#item得是一个Node,加的如果只是一个数,得变成Node
if isinstance(dataOrNode,Node):
item = dataOrNode
else:
item = Node(dataOrNode)
#头为空
if not self.head:
self.head = item
self.length += 1
else:
node = self.head
#找到最后一个点把它连起来
while node.next:
node = node.next
#如果item是一个链子如何解决
node.next = item
self.length += 1
#删除一个节点
def delete(self,index):
if index<0 or index>=self.length:
return None
current = self.head
pre = None
temp_index = 0
while current.next:
if temp_index == index:
if not pre:
self.head = current.next
else:
pre.next = current.next
self.length -= 1
return
pre = current
current = current.next
temp_index += 1
#链表反转
def reverse(self,head):
cur = head
pre = None
while cur is not None:
#print(head)
tmp = cur.next
cur.next = pre
pre = cur
#print(pre.data)
cur = tmp
head = pre
问题:链表添加3个元素,然后反转
mychain = Chain()
mychain.append(1)
mychain.append(2)
mychain.append(3)
mychain.reverse(mychain.head)
依次输出链表的每个值
node2 = mychain.head
while node2 is not None:
print(node2.data)
node2 = node2.next
只输出一个1。
pre反转正确,之前的head重新赋值了现在的pre(之前head指向的地址变成了现在pre的地址),我觉得很对,以前mychain.head是123这个地址,现在的mychain.head是321这个地址,那应该是能正常输出3-2-1,可是结果就是只有1,不明白
辅助代码:
head = {'a':1,'b':2}
def change(head):
head['k'] = 2
change(head)
print(head)
结果:{'a': 1, 'b': 2, 'k': 2},因为是引用传递,head作为参数传入change函数,出来,内容改变,很对,但是传reverse函数,没有预想的效果,不明白??
题目描述
题目来源及自己的思路
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
你期待的结果是什么?实际看到的错误信息又是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为python里的是传值操作,你在reverse里的操作并没有改变Chain这个类的head属性啊,把最后一句改成self.head = pre试试。不过按你的代码应该是输出123,而不单单1,这个是有点奇怪。
循环体里改变循环变量这种做法是极不推荐的。