Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过索引链表交换变量?_Python_Linked List - Fatal编程技术网

Python 通过索引链表交换变量?

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=下一个

我正在学习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.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
a
b
彼此相邻的情况:它愉快地假设您的六个位置指针(上一个元素下一个元素下一个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
a
b
彼此相邻的情况:它愉快地假设您的六个位置指针(上一个元素下一个元素下一个a | b)是独立的。