我有一个非常琐碎的问题,应该只是更改链接而已。我已经阅读了一些答案,有些显示了如何通过交换数据来做到这一点,还有一些对此概念进行了模糊的解释。
这似乎使我无所适从。当我将目标节点交换到上一个节点时,该节点将被跳过。然后,当我返回引用下一个节点时,我陷入了一个永恒的循环。我需要知道是否需要从头开始遍历另一个节点,或者是否可以简单地引用新链接。我知道我缺少明显的东西。
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,12,8,14,4}
12
8
14
{18,28,2,12,12,4}
所需的输出为:
{18,28,2,12,12,8,14,4}
{18、28、2、8、12、14、4}
答案 0 :(得分:0)
您似乎正在尝试将特定节点(由节点的值确定)与后面的节点交换?。
您提出的问题的最简单解决方案是仅交换值,而不是尝试交换节点。
由于您正在处理基本体,因此类似的事情应该起作用
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);
}
只需确保处理您的目标值在列表的最后一个节点中的情况。
编辑-由于出于某种原因您想更改链接,因此一般逻辑是-