我遇到了一个问题,在这个问题中,您应该交换一组双链表中的节点。例如:对于列表 1 <-> 2 <-> 3 <-> 4 <-> 5 <-> 6 <-> 7 <-> 8
对于给定的间隔2-4和6-7,您应该将间隔中的节点作为一个组与间隔中的其他节点交换,以获得输出 1 <-> 6 <-> 7 <-> 5 <-> 2 <-> 3 <-> 4 <-> 8
. 我的想法是将整个组视为一个节点,这意味着我应该将6.prev与1连接起来,将7.next与5连接起来,但是由于这是一个双链接列表,我发现很难想出一个能够成功更改所有所需指针的解决方案。有人能帮我解释一下怎么做吗?谢谢。
2条答案
按热度按时间k5ifujac1#
双链表中的“节点”有2个指针:-下一个元素-上一个元素
应该复制两个间隔的第一个和最后一个元素的指针
作为交换间隔的最终操作,您应该说
pvabu6sv2#
双链表
head
以及tail
. 每个节点也有prev
以及next
指针是null
如果节点是head
或者tail
分别。我们在这里的假设是,有两段要交换
(start1-end1)
以及(start2-end2)
没有重叠。全部复制
prev
以及next
对临时变量的引用互换
start1
以及start2
,并处理条件,如果start1
是head
```2. start2.prev=prev1
3. if prev1=null, head=start2 else prev1.next=start2
4. start1.prev=prev2
5. prev2.next=start1