python链表反转引发的问题

发布于 2022-09-07 20:31:31 字数 2395 浏览 24 评论 0

先附上代码
#节点类
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,不明白
clipboard.png

辅助代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烛影斜 2022-09-14 20:31:31

因为python里的是传值操作,你在reverse里的操作并没有改变Chain这个类的head属性啊,把最后一句改成self.head = pre试试。不过按你的代码应该是输出123,而不单单1,这个是有点奇怪。

梦巷 2022-09-14 20:31:31

循环体里改变循环变量这种做法是极不推荐的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文