鱼C论坛

 找回密码
 立即注册
查看: 1900|回复: 2

[已解决]家人们,这是怎么回事,求解呀

[复制链接]
发表于 2022-7-22 15:16:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 xiangyuebj 于 2022-7-22 15:17 编辑
  1. #! -*- encoding = utf-8 -*-

  2. class Node:
  3.     def __init__(self, key, value):
  4.         self.key = key
  5.         self.value = value
  6.         self.prev = None
  7.         self.next = None

  8.     def __str__(self):
  9.         val = '{%d : %d}' % (self.key, self.value)
  10.         return val

  11.     def __repr__(self):
  12.         val = '{%d : %d}' % (self.key, self.value)
  13.         return val


  14. class DoubleLinkedList:
  15.     def __init__(self, capacity=0xffff):
  16.         self.capacity = capacity
  17.         self.head = None
  18.         self.tail = None
  19.         self.size = 0

  20.     # 从头部添加
  21.     def __add_head(self, node):
  22.         if not self.head:
  23.             self.head = node
  24.             self.tail = node
  25.             self.head.next = None
  26.             self.head.prev = None
  27.         else:
  28.             node.next = self.head
  29.             self.head.prev = node
  30.             self.head = node
  31.             self.head.next = None
  32.         self.size += 1
  33.         return node

  34.     # 从尾部添加
  35.     def __add_tail(self, node):
  36.         if not self.tail:
  37.             self.tail = node
  38.             self.head = node
  39.             self.tail.next = None
  40.             self.tail.prev = None
  41.         else:
  42.             self.tail.next = node
  43.             node.prev = self.tail
  44.             self.tail = node
  45.             self.tail.next = None
  46.         self.size += 1
  47.         return node

  48.     # 从尾部删除

  49.     def __del_tail(self):
  50.         if not self.tail:
  51.             return
  52.         node = self.tail
  53.         if node.prev:
  54.             self.tail = node.prev
  55.             self.tail.next = None
  56.         else:
  57.             self.tail = self.head = None
  58.         self.size -= 1
  59.         return node

  60.     # 从头部删除

  61.     def __del_head(self):
  62.         if not self.head:
  63.             return
  64.         node = self.head
  65.         if node.next:
  66.             self.head = node.next
  67.             self.head.prev = None
  68.         else:
  69.             self.tail = self.head = None
  70.         self.size -= 1
  71.         return node

  72.     # 任意节点删除
  73.     def __remove(self, node):
  74.         # 如果node=node,默认删除尾部节点
  75.         if not node:
  76.             node = self.tail
  77.         if node == self.tail:
  78.             self.__del_tail()
  79.         elif node == self.head:
  80.             self.__del_head()
  81.         else:
  82.             node.prev.next = node.next
  83.             node.next.prev = node.prev
  84.             self.size -= 1
  85.         return node

  86.     # 弹出头部节点
  87.     def pop(self):
  88.         return self.__del_head()

  89.     # 添加节点
  90.     def append(self, node):
  91.         return self.__add_tail(node)

  92.     # 往头部添加节点
  93.     def append_front(self, node):
  94.         return self.__add_head(node)

  95.     # 删除节点
  96.     def remove(self, node=None):
  97.         return self.__remove(node)

  98.     def print(self):
  99.         p = self.head
  100.         line = ''
  101.         while p:
  102.             line += '%s' % p
  103.             p = p.next
  104.             if p:
  105.                 line += '=>'

  106.         print(line)


  107. if __name__ == '__main__':
  108.     W = DoubleLinkedList(10)
  109.     nodes = []
  110.     for i in range(10):
  111.         node = Node(i, i)
  112.         nodes.append(node)
  113.     W.append(nodes[0])
  114.     W.print()
  115.     W.append(nodes[1])
  116.     W.print()
  117.     W.pop()
  118.     W.print()
  119.     W.append(nodes[2])
  120.     W.print()
  121.     W.append_front(nodes[3])
  122.     W.print()
  123.     W.append(nodes[4])
  124.     W.print()
  125.     W.remove(nodes[2])
  126.     W.print()
  127.     W.remove()
  128.     W.print()
复制代码


代码在此

有两个问题,,

第一个
11.jpg
这个截图是看教程的运行结果,

2.jpg
这个是我的运行结果,我对着教程里的代码对比了 一样的,为什么我的结果和教程里的结果不一样,请大神帮我检查下,

第二个问题
333.jpg
Pycharm一个提示,应该是不影响代码运行,但是不知道这是什么意思,百度上也没查出来。请论坛里大神帮忙指点一下

最佳答案
2022-7-23 15:46:42
本帖最后由 Stubborn 于 2022-7-23 15:52 编辑

自己审视一下,第37行代码,为什么要那么写

从运行结果看,添加3号节点,从头部添加节点之后,丢失头部节点的后续节点“指针”。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-23 15:46:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Stubborn 于 2022-7-23 15:52 编辑

自己审视一下,第37行代码,为什么要那么写

从运行结果看,添加3号节点,从头部添加节点之后,丢失头部节点的后续节点“指针”。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-7-24 23:23:12 | 显示全部楼层
Stubborn 发表于 2022-7-23 15:46
自己审视一下,第37行代码,为什么要那么写

从运行结果看,添加3号节点,从头部添加节点之后 ...

感谢大神指导,我目前还是只能跟着敲代码的阶段,有些地方还不能好呢理解,,不过还是粗心了,,这里没自己检查出来,感谢感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表