Python 通过索引链表交换变量?
我正在学习LinkedList,我看到了一个相关的答案——但我认为这对我的具体情况没有帮助: 但是,我遇到了一个类似的问题,其中一个变量消失了Python 通过索引链表交换变量?,python,linked-list,Python,Linked List,我正在学习LinkedList,我看到了一个相关的答案——但我认为这对我的具体情况没有帮助: 但是,我遇到了一个类似的问题,其中一个变量消失了 类节点(对象): 定义初始值(self,val): self.val=val self.next=无 def get_数据(自身): 返回self.val def set_数据(自身、val): self.val=val def get_next(自我): 返回self.next def set_next(自我,下一个): self.next=下一个
类节点(对象):
定义初始值(self,val):
self.val=val
self.next=无
def get_数据(自身):
返回self.val
def set_数据(自身、val):
self.val=val
def get_next(自我):
返回self.next
def set_next(自我,下一个):
self.next=下一个
类链接列表(对象):
定义初始值(自身,*值):
self.count=len(值)-1
self.head=节点(值[0])
node=self.head
对于idx,枚举中的val(值):
如果idx==0:
持续
其他:
tempnode=节点(val)
node.set_next(tempnode)
node=node.get_next()
def get_计数(自身):
回头
def插入(自身,数据):
新节点=节点(数据)
新建_节点。设置_下一步(self.head)
self.head=新节点
self.count+=1
def插入位置(自身、idx、val):
断言idx self.count-1:
返回
如果idx==0:
self.head=self.head.get_next()
其他:
tempIdx=0
node=self.head
当tempIdxidx_2:
idx_b,idx_a=idx_1,idx_2
其他:
idx_b,idx_a=idx_2,idx_1
tempIdx=0
上一个节点=无
node=self.head
而tempIdx
跳到类方法swap。这是出现问题的地方,这是我调用dum_list时的代码输出:
测试=链接列表(1,2,4)
测试。在(idx=2,val=3)处插入_
test.dump_list()
>>>>
节点:1
节点:2
节点:3
节点:4
##到目前为止,一切都很好!
测试交换(1,2)
test.dump_list()
>>>>
节点:1
节点:3
节点:4
因此,将删除值为2的节点。我不知道我会错在哪里。。。在相关问题中,需要更新的是头部。但这不是我的问题,因为值2的节点不是头
我接受了一些建设性的批评,并对交换方法做了一些修改;现在可以了
def交换(自身、idx_a、idx_b):
如果idx_a==idx_b:
返回
如果idx_a>idx_b:
idx_2,idx_1=idx_a,idx_b
其他:
idx_2,idx_1=idx_b,idx_a
node=self.head
tempIdx=0
当tempIdx
查看您的掉期代码;它不处理a
ab
彼此相邻的情况:它愉快地假设您的六个位置指针(上一个元素下一个元素下一个a | b)是独立的。用纸和铅笔在你的实际案例中穿行逻辑。在痛苦地定位两个选定的元素之后,您已经
prev_a => None
elem_a, prev_b => 1
next_a, elem_b => 2
next_b => 3
现在为您交换代码:
prev_a.set_next(elem_b)
这会自动失败,prev_a
为None
;到目前为止还不错
elem_b.set_next(next_a)
Node2。下一步
现在指向Node2本身
prev_b.set_next(elem_a)
Node1。下一步
现在指向Node1本身
elem_a.set_next(next_b)
Node1。下一步
现在指向Node3
另外,请注意,head
仍然指向节点1,而不是节点2
您已经从列表中整齐地取消了Node2的链接;你现在有
head => Node1 => Node3 => Node4 => None
Node2 => Node2
用铅笔和纸仔细检查这个箱子。更改的顺序将允许您交换相邻节点?这里的问题是需要Node2.next来引用Node1,而不是原始的Node1.next 当我获取数据结构时,我们仔细检查了位置,并从新列表的末尾一直调整指针。在本例中,我们将首先更改
Node1。然后
请注意,您也可以通过删除一个节点并在另一侧重新插入它来完成此操作
我知道这不是一个完整的解决方案;我希望这足以让你自己完成修理。:-) 查看您的交换代码;它不处理
a
ab
彼此相邻的情况:它愉快地假设您的六个位置指针(上一个元素下一个元素下一个a | b)是独立的。