1111112222111 2019-02-26 15:00 采纳率: 0%
浏览 329

用python实现双向循环链表的问题

实现remove根据指定元素名删除元素的时候,cur表示链表当前位置,next表示后继节点,prev表示前驱结点,为什么上面两行就执行不通

cur.next = cur.prev.next # 无限循环
cur.prev = cur.next.prev # 无限循环
cur.next.prev = cur.prev # 正常
cur.prev.next = cur.next # 正常

双向链表

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 02:12
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Python中,我们不能直接使用if语句来判断是否是无限循环。这是因为if语句只能处理真和假两种情况。

    然而,在你提到的代码片段中,cur.next = cur.prev.nextcur.prev = cur.next.prev这两行会引发一个错误:因为它们试图将两个对象(curcur.prev)设置为同一个值,这违反了Python中的引用类型定义。因此,这些代码实际上不会被执行,而是会抛出一个异常。

    如果你想解决这个问题,你可以尝试以下方法:

    class Node:
        def __init__(self, value):
            self.value = value
            self.next = None
            self.prev = None
    
    class DoublyLinkedList:
        def __init__(self):
            self.head = None
        
        def append(self, value):
            new_node = Node(value)
            
            if not self.head:
                self.head = new_node
            else:
                current = self.head
                while current.next:
                    current = current.next
                    
                current.next = new_node
                new_node.prev = current
                
        def remove(self, item_name):
            current = self.head
            
            while current:
                if current.value == item_name:
                    break
                    
                current = current.next
                
            if current and current.next:
                current.next.prev = current.prev
                current.prev.next = current.next
                current.next = None
                current.prev = None
                return True
            else:
                return False
    
    # 创建链表并添加元素
    dll = DoublyLinkedList()
    dll.append('head')
    dll.append('tail')
    
    # 删除指定元素
    print(dll.remove('tail'))  # 应输出True
    

    这个解决方案首先创建了一个双向链表,并在链表末尾添加了一些元素。然后,它尝试从链表中删除名为 'tail' 的元素。如果找到了目标元素,它会将其移除并将前一个节点的下一个节点链接到当前节点的前驱节点,同时将后一个节点的前驱节点链接到当前节点的下一个节点。如果找不到目标元素,则返回False。

    评论

报告相同问题?

悬赏问题

  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA