python - 如何在不交换数据的情况下对双向链表进行冒泡排序(仅传输链接)
问题描述
我在排序方法中的代码有问题。我需要在不更改任何数据的情况下对双向链表中的节点进行排序,只能在节点的下一个和上一个部分传输(更改节点)。
我试图通过这个例子进行排序:
def sort(self):
# Check if head is None
if self.head is None:
return
if self.head.next is None:
return
# Sort
change = 1
while change:
# Variables
change = 0
curr = self.head
# Sort one iteration
while curr.next is not None:
if curr.data < curr.next.data:
change = 1
temp_curr = curr.prev
print(temp_curr)
curr.prev = curr.next
print(curr.prev)
curr.next = curr.next.next
print(curr.next)
temp_next = curr.next.prev
curr.next.prev = temp_curr
curr.next.next = temp_next
curr = curr.next
class ListNode(object):
def __init__(self, data):
# store data
self.data = data
# store reference (next item)
self.next = None
# store reference (previous item)
self.previous = None
class List(object):
def __init__(self):
self.head = None
def add_list_item(self, item):
if isinstance(item, ListNode):
if self.head is None:
self.head = item
item.previous = None
item.next = None
else:
curr = self.head
while curr.next is not None:
# Iterate
curr = curr.next
# Add item into tail
curr.next = item
item.previous = curr
item.next = None
def print_ls(self):
# Start from head
current_node = self.head
# Iterate via the whole list
while current_node is not None:
# Print one at one
print(current_node.data)
# jump to the linked node
current_node = current_node.next
def sort(self):
# Check if head is None
if self.head is None:
return
if self.head.next is None:
return
# Sort
change = 1
while change:
# Variables
change = 0
curr = self.head
# Sort one iteration
while curr.next is not None:
if curr.data < curr.next.data:
change = 1
temp_curr = curr.prev
print(temp_curr)
curr.prev = curr.next
print(curr.prev)
curr.next = curr.next.next
print(curr.next)
temp_next = curr.next.prev
curr.next.prev = temp_curr
curr.next.next = temp_next
curr = curr.next
if __name__ == '__main__':
link_list = List()
link_list.add_list_item(ListNode(2))
link_list.add_list_item(ListNode(1))
link_list.add_list_item(ListNode(3))
link_list.sort()
link_list.print_ls()
解决方案
推荐阅读
- django - 将带有令牌的链接重定向到正确的页面
- java - 如何检查 Firestore 文档创建是否无效?
- reactjs - TS2339:“HTMLDivElement”类型上不存在属性“宽度”
- c# - 我收到消息“缺少类型映射配置或不支持的映射”。
- jenkins - 如何从 Active 选择参数的 GroovyScript 部分读取文件
- c++ - 用数组初始化类
- python - 骨架_to_csgraph(python)的坐标错误
- tabulator - 列宽不适用于页面上的第二个和后续表格
- sql-server - 如何为 SQL 和 Tableau 创建自己的数据库?
- javascript - ScrollTop 仅滚动到可滚动 div 中可见的第一个视图项目