使用单链表,如何在python中交换节点?

2024-01-27

目前,我一直在尝试根据我的主功能开关(myList,index)重新排列链表。

def createList(plist):
    linkedList = None
    # goes backwards, adding each element to the beginning
    # of the list.  
    for index in range(len(plist)-1, -1, -1):
        linkedList = insertValueHead(linkedList, plist[index])
    return linkedList

def insertValueHead(linkedList, value):
    newnode = {}
    newnode["data"] = value
    #set the next pointer of this new node to the head of the list, linkedList
    #newnode is now the head of the list 
    newnode["next"] = linkedList
    return newnode

def listString(linkedList):
   ptr = linkedList
   str1 = ''
   while ptr != None:
     str1 += str(ptr['data'])
     ptr = ptr['next']
     if ptr != None:
      str1 += "->"
  str1 = str1
  return str1

def switch(j, i):
   head = j
   currentItem = j[0]     # The head again
   prevItem = 1       # The item that links to tempItem
   for x in range(i):    # Find the item to swap
        prevItem = currentItem
        currentItem = currentItem['next']
        currentItem = currentItem['next']
        temp = currentItem['next']
        currentItem['next'] = head['next']
        head['next'] = prevItem['next']
        prevItem['next'] = temp

def testSwitch():
    #test code to ensure that switch() is working correctly.
    myList = createList([10, 20, 30, 40, 50, 60])
    print "The initial list", listString(myList)
    myList = switch(myList, 2)
    print "Switching the 1 and the 2.  Resulting list is ", listString(myList)

testSwitch()

这应该会产生一个包含交换元素的列表。但是,当我运行它时,这是输出:

The initial list 10->20->30->40->50->60
Switching the 1 and the 2.  Resulting list is 

接下来是错误:

    currentItem = currentItem['next']
TypeError: list indices must be integers, not str

我究竟做错了什么?我似乎无法弄清楚...


如果您需要支持 switch 操作,那么简单链接列表不是一个非常有用的结构。在双链表上,如果节点有向前和向后的指针,那么这很容易,但在单链表上,你需要至少扫描一次列表。另外,你的代码太混乱了,没有人能真正调试它。因此

  • 例如,使用基于类的列表而不是 Node 子类的项目。
  • for switch你真的想要有双向链表的操作。 也许使用linux链表约定,其中末端也是一个列表节点

就像是

 class Node(object):
     prev = None
     next = None

 class List(object):
     def __init__(self):
         self.head = self
         self.tail = self
         self.prev = self
         self.next = self
         self.nil = self

     def insert_head(self, node):
         node.next = self.head.next
         self.head.next.prev = node
         node.prev = self.head
         self.head.next = node

     def __iter__(self):
         current = self.head.next
         while current != self.nil:
             yield current
             current = current.next

     def __str__(self):  # the "list_string" op
         items = []
         return ' -> '.join(map(str, self))

 class TestNode(Node):
     def __init__(self, value):
         self.value = value

     def __repr__(self):
         return repr(self.value)

list = List()
list.insert_head(TestNode('a'))
list.insert_head(TestNode('b'))
print(list)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用单链表,如何在python中交换节点? 的相关文章

随机推荐

  • Twilio 将发布收集的数字及其他详细信息

    我可以通过 twilio 收集的数字发送附加数据吗 我想要实现的是 如果有人发送一条短信说 帮助 我们会致电支持团队并询问他们我们已收到短信 如果他们想与之交谈 请按 1 如果他们按 1 我们将能够拨打我们收到短信的号码 我正在检查 twi
  • Java 中连续“if”语句的简化[重复]

    这个问题在这里已经有答案了 我有一系列if语句 如下图 if board x 1 y true ar 1 if board x y 1 true ar 1 if board x 1 y true ar 1 if board x y 1 tr
  • OpenCV - 如何在拼接图像的对应点之间进行映射

    我正在使用 OpenCV 3 2 并且设置了一个缝合器来缝合两个图像 缝合效果很好 但是一旦完成 我希望能够确定从图像 A 中的点到图像 B 中对应点的映射 我不关心图像在全景图中的布局方式 我只需要能够从 x A y A 图像 A 中的点
  • 从 power bi 公共嵌入中删除共享栏

    我有一份关于 power bi 的报告 已发布在网络上 我将在我的计算机上创建一个本地页面 以通过嵌入代码查看它 并在 Dropbox 上与其他人共享 我想删除带有社交媒体链接的按钮栏以防止共享 我还可以阻止显示 iframe 源链接吗 也
  • for 循环中的隐式内存别名

    我正在使用 golangci lint 并且在以下代码中收到错误 versions ObjectDescription populate versions for i v range versions res createWorkerFor
  • 如何在 postgresql 中创建 n-gram

    我希望在我的应用程序中具有搜索功能 我使用 trigram 来实现它 并且工作正常 问题是 trigram 正在创建单词的 3 个字符组的序列 我想要在单个对象中包含超过 3 个字符 例如 select show trgm abcpqrs
  • HTTP 缓存控制 max-age,必须重新验证

    我有几个与缓存控制相关的疑问 如果我指定缓存控制max age 3600 must revalidate对于静态 html js images css 文件 在 HTTP 标头中定义了 Last Modified 标头 浏览器 代理缓存 如
  • 从 Windows 服务启动 Windows 应用程序

    我正在尝试使用以下代码从 Windows 服务启动 Windows 应用程序 Process Start filename exe 在 Windows 7 中 我收到一个弹出窗口 显示 此计算机上运行的程序正在尝试显示一条消息 您无法从 W
  • Python subprocess.popen() 无需等待

    我在 Windows 上使用 Python 3 4 2 在 script1 py 中我正在这样做 myProc subprocess Popen sys executable script2 py argument myProc commu
  • iPhone 上奇怪的应用程序崩溃 - 没有被 Apple 拒绝

    我最近通过 iTunes Connect 向 Apple 提交了我的应用程序 它现在已在 iTunes 商店中 然而 当我把它下载到朋友的 iPhone 上时 它立即崩溃了 我在 iPhone 模拟器和 iPad 上进行了测试 我没有 iP
  • 可编辑数据表 RowKey Null

    我有一个可编辑的 Primefaces 数据表 配置为在编辑单元格时调用 onCellEdit 方法 一切工作都很好 除了 CellEditEvent rowKey 始终为 null 尽管在数据表声明中使用 rowKey 将其显式设置为有效
  • 在 Windows 上,如何检测文件的行结尾?

    我已经看到了这些问题的答案 但据我所知 这些答案并不是从 Windows 角度来看的 Windows 使用 CR LF Unix 使用 LF Mac 使用 LF 经典 mac 使用其他内容 我没有足够的智慧来告诉我 如果一个文件使用的行尾与
  • 如何使浏览器后退按钮忽略主题标签?

    我有一个网站 它使用哈希来打开 关闭当前页面上的一些选项卡和图层 使用哈希值的原因是 如果用户通过链接访问另一个页面 然后返回原始页面 则所有选项卡和图层的打开方式都应与离开该页面时完全相同 问题是 在第一页上并使用浏览器后退按钮时 只有哈
  • Bower:ENOGIT Git 未安装或不在 PATH 中

    Git 已安装并位于路径中 平台 红帽企业 Linux en wikipedia org wiki Red Hat Enterprise Linux 5 8 gt which git usr local bin git 然而 Bower 找
  • 基于窗口调整大小的 jQuery 位置元素

    如果您查看此页面 http dev driz co uk tips http dev driz co uk tips 我正在做一些实验来更多地了解 jQuery 以及如何开发类似于我们在 Facebook 上看到的东西 您将看到我有一个相对
  • Tensorflow.compat.v2.__internal__.tracking'没有属性'TrackableSaver'错误

    安装 Tensorflow js 后出现此错误 以前这个程序是有效的 会不会是版本的问题 我真的很好奇是什么原因造成的 提前致谢 File OneDrive Masa st Bitirme Proje neural network sini
  • Android - Google Map API v2 - 不幸的是,应用程序已停止。每次强制关闭

    大家好 我在这里找到了关于使用 Google Map API 时强制关闭 Android 中的应用程序的类似主题 我几乎尝试了所有方法 一步一步按照教程进行操作并检查了两次以上 每次出现问题并且我的应用程序都会立即崩溃 我什至无法运行 Go
  • Bootstrap-select插件:如何避免闪烁

    Bootstrap select 插件非常棒 http silviomoreto github io bootstrap select http silviomoreto github io bootstrap select 它提供了一种在
  • Ruby on Rails、Paperclip、Heroku、GitHub 和 AWS - 保护密钥

    我正在使用 Heroku 托管的 RoR 我想使用回形针将文件存储在 s3 上 我的源代码托管在 github 上 全世界都可读 对世界其他地方保密密钥的最佳做法是什么 Paperclip 建议将访问密钥存储在配置文件 或代码 中 例如我有
  • 使用单链表,如何在python中交换节点?

    目前 我一直在尝试根据我的主功能开关 myList index 重新排列链表 def createList plist linkedList None goes backwards adding each element to the be