【发布时间】:2017-02-02 21:18:13
【问题描述】:
我有一个函数,例如,我必须移动现有代码
def print_chain_and_ids(chain):
current = chain
while current != None:
print(id(current), current.get_data())
current = current.get_next()
a = Node('first')
b = Node('middle')
c = Node('last')
a.set_next(b)
b.set_next(c)
print_chain_and_ids(a)
move_node_to_end(a, 'middle')
print_chain_and_ids(a)
所以现在链条开始了:
a ----> b ----> c
节点c位于链的末尾。
如果我想将节点 b 移动到链的末尾,那么它会:
a ----> c ----> b
这样它就不会改变最后一个节点的值,而只是移动它。我已经准备好一个节点类:
class Node:
def __init__(self, init_data):
self.data = init_data
self.next = None
def get_data(self):
return self.data
def get_next(self):
return self.next
def set_data(self, new_data):
self.data = new_data
def set_next(self, new_next):
self.next = new_next
def __str__(self):
return str(self.data)
我想知道我将如何去做。
我想做一个函数,它接受两个输入,链的第一个节点,以及移动到链最后位置的值。所以:
def node_to_end(first_node, value_to_move):
.....
这是我必须修改节点位置的地方。所以要移动的值会移到最后一个位置。
a = Node('blue')
b = Node('red')
c = Node('green')
a.set_next(b)
b.set_next(c)
这将导致blue red green
node_to_end(a, 'red')
会创建一个链
blue green red
感谢您的帮助。
【问题讨论】:
-
所以你想让
c指向b和a指向c和b指向什么?您已经编写了set_next方法,只需使用它来使它们指向您想要的内容....我不明白您的问题。对不起。 -
我希望 b 指向 c 并且 c 指向 b。我不希望 b 和 c 的值只改变位置。
-
目前
b=a.next和c=a.next.next。现在做:a.next = c;c.next=b;b.next=None -
我认为你需要重新阅读你的链表笔记,不要粗鲁或任何事情。如果
b->c和c->b那么这不是你举的例子:a ----> c ----> b。您仍然拥有“移动”节点的工具。我仍然无法理解您对您编写的程序的不理解。如果您没有编写程序,也许您应该向您的老师/导师/作者询问如何使用该程序。从您向我们展示的内容来看,您应该已经知道该怎么做了。 -
您似乎无法仅使用“下一个”链接来做到这一点。您可能需要在 Node 类中添加一个“prev”链接。可以使用 b.prev 找到节点 a,b.next 找到节点 c,然后将三个节点上的链接全部更改。
标签: python python-3.x linked-list nodes