当前位置: 首页 > 知识库问答 >
问题:

交换双链接列表中的一组节点

曹浩
2023-03-14

我遇到了一个问题,在这个问题中,您应该交换双链接列表中的一组节点。例如:对于列表1


共有2个答案

柴阳云
2023-03-14

双重链接列表有头和尾。此外,每个节点都有prevNext指针,如果节点分别是head尾部,则指针为null

我们在这里的假设是,要交换的两个段(start1-end1)(start2-end2)不重叠。

将所有prevnext引用复制到临时变量

1. prev1=start1.prev, prev2=start2.prev, next1=end1.next, next2=end2.next

交换start1start2,如果start1head

2. start2.prev=prev1
3. if prev1=null, head=start2 else prev1.next=start2
4. start1.prev=prev2
5. prev2.next=start1

交换end1end2,如果end2tail

6. end1.next=next2
7. if next2=null, tail=end1 else next2.prev=end1
8. end2.next=next1
9. next1.prev=end2
钱朝明
2023-03-14

双链表中的"节点"有2个指针:-下一个元素-上一个元素

您应该复制两个间隔的第一个和最后一个元素的指针

-First1,Last1 = 2,4 //(i mean the pointer to 2 and 4 not integer)
-First2,Last2 = 6,7

作为交换间隔的最终操作,您应该说

(First2.previous).next = First1  // ( First2.previous is 5 in the example)
(Next2.next).previous = Next1   // (Next2.next is 8 in the example)

(First1.previous).next = First2 //(First1.previous is 1)
(Next1.next).previous = Next2   //(Next1.next is 5)
 类似资料:
  • 我在Java中实现一个双链接列表时遇到了一个问题。特别是要交换2个以下节点(在我的例子中,一个节点包含一个政治候选人)。 假设下面的DLL: head- 作为输出,我没有从头到尾的正确DLL,但从头到尾都很好: 我已经写了几个版本的这个方法reverseTwoNode。我甚至尝试在节点内部交换数据,而不是交换节点,我也有同样的问题。你能帮我真是太好了,我花了这么多时间在这个简单的功能上,我看不出有

  • 以下代码删除双链接列表中的第一个节点。 如果列表只包含1个元素,我们将last的引用设置为null。我的问题是,我们为什么不将first的引用设置为null?这会有什么不同吗?

  • 我正在尝试交换双链接列表中的两个节点。下面是具有交换功能的程序部分。 当我运行这个程序时,在第一个和第二个节点的情况下,它崩溃了。而在任何其他节点的情况下,它提供无限循环输出。(例如:-2- 我知道还有一些关于节点交换的问题,但是我没有找到任何与我的问题相似的问题。请帮帮我...!! 提前谢谢。

  • 我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或