【发布时间】:2020-04-04 14:59:10
【问题描述】:
我正在尝试交换单链表中的节点对,这样如果链表是 1->2->3->4,那么输出的是 2->1->4-> 3.我已经设法通过交换第一对输出 2->1->3->4 但现在我不确定如何循环整个列表并执行剩余的交换。我的直觉告诉我,我需要使用 while 循环,但我不确定如何实现。
class Node():
def __init__(self,dataval=None):
self.dataval=dataval
self.nextval=None
class Linkedlist():
def __init__(self,headval=None):
self.headval=headval
def printlist(self):
headval=self.headval
while headval is not None:
print(headval.dataval)
headval=headval.nextval
def swapnodes(self,headval):
temp=headval.nextval
headval.nextval=temp.nextval
temp.nextval=headval
self.headval=temp
List1=Linkedlist()
Node1=Node("1")
Node2=Node("2")
Node3=Node("3")
Node4=Node("4")
List1.headval=Node1
Node1.nextval=Node2
Node2.nextval=Node3
Node3.nextval=Node4
List1.swapnodes(Node1)
List1.printlist()
【问题讨论】:
-
为了交换 2 个节点,顺序是首先交换指向这 2 个节点的任何内容,然后交换这 2 个节点的“下一个”引用。这消除了对相邻节点和非相邻节点的不同处理。如果“head”不是节点,如果“head”指向要交换的2个节点之一,则需要特殊处理。
标签: python-3.x linked-list swap