gpt4 book ai didi

java - 交换元素双向链表

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:56 27 4
gpt4 key购买 nike

我实现了选择排序,我需要交换元素。我有带有上一个和下一个链接的双向链表。并链接到列表中的第一个和最后一个元素我总是需要将一些节点 b 与第一个节点 toStartFrom

交换
public void Swap(Node toStartFrom, Node b) {
Boolean NextToEachOther = (toStartFrom.next == b);
toStartFrom.next = b.next;
b.previous = toStartFrom.previous;
if (NextToEachOther) {
toStartFrom.previous = b;
b.next = toStartFrom;
} else {
toStartFrom.previous = b.previous;
b.next = toStartFrom.next;
}
}

public void display() {
Node current = first;
while (current != null) {
...printing...
current = current.next;
}
}

但它不起作用。没有错误只是没有按正确的顺序排序。并且在 toStartFrom 节点之后排序后不显示任何元素。

最佳答案

您还需要更新被交换的 2 旁边的节点

例如,考虑这个列表:

首先 -> a -> b -> c

如果您希望交换 first 和 b,那么您还必须更新 a 和 c 的下一个和上一个引用。

编辑:此代码应放在进行交换的代码之前和 boolean 声明之后

Edit2:此外,如果您对列表的头部/尾部有引用,您也需要更新它们。不过,我没有看到您在代码中的任何地方引用了头部或尾部。

if(toStartFrom.prev != null)
{
toStartFrom.prev.next = b;
}
if(toStartFrom.next != b) // Equivalent to NextToEachOther
{
toStartFrom.next.prev = b;
}
if(b.next != null)
{
b.next.prev = toStartFrom;
}
if(b.prev != toStartFrom) // Equivalent to NextToEachOther
{
b.prev.next = toStartFrom
}

关于java - 交换元素双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909962/

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