gpt4 book ai didi

java - java链表中两个相邻节点的交换

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:37 25 4
gpt4 key购买 nike

我有一个非常微不足道的问题,只需更改链接即可。我读过一些答案,有些答案展示了如何通过交换数据来做到这一点,有些则对这个概念给出了模糊的解释。

这个方法似乎让我原地踏步。当我将目标节点交换到前一个节点时,该节点将被简单地跳过。然后,当我返回引用下一个节点时,我陷入了永恒的循环。我需要知道是否需要从头部遍历另一个节点,或者我是否可以简单地引用新链接。我知道我错过了一些非常明显的东西。

for (cursor = head; cursor != null; cursor = cursor.link) {
if (target == cursor.data) {
Target = cursor.link.getLink();
next = cursor.getLink();
prev = cursor;
System.out.println(prev.getData()); // for testing
System.out.println(next.getData());
prev.setLink(Target); // Swaps the first link
//Target.setLink(prev); // causes eternal loop
}}
return Target.getData();
}

这是我的测试方法,创建一个包含 7 个节点的列表,然后打印到屏幕上。

public static void main(String[] args) {
SLL LL = new SLL(18, null);

LL.add(4);
LL.add(14);
LL.add(8);
LL.add(12);
LL.add(2);
LL.add(28);
System.out.println(LL.toString());
System.out.println(LL.swap(12));
System.out.println(LL.toString());
}

这是我得到的输出:

{18, 28, 2, 12, 8, 14, 4}

12

8

14

{18, 28, 2, 12, 14, 4}

期望的输出是:

{18, 28, 2, 12, 8, 14, 4}

{18, 28, 2, 8, 12, 14, 4}

最佳答案

看起来您正在尝试将特定节点(由节点的值确定)与其后面的节点交换?

解决您提出的问题的最简单的解决方案是仅交换值,而不是尝试交换节点。

这样的东西应该可以工作,因为你正在处理基元

if(currNode.value() == targetValue) {
Node nextNode = currentNode.next();
currentNode.setValue(nextNode.getValue()); //set the current node's value to the next node's value
nextNode.setValue(targetValue);
}

请务必处理目标值位于列表中最后一个节点的情况。

编辑-因为出于某种原因你想更改链接,一般逻辑是-

  • 跟踪 3 个节点:上一个、当前、下一个
  • 设置上一个链接=下一个
  • 设置 current.link = next.link
  • 设置 next.link = current

关于java - java链表中两个相邻节点的交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com