交换元素双链表



我实现了选择排序,我需要交换元素。我有双重链表与前一个和下一个链接。并链接到List中的第一个和最后一个元素我总是需要交换节点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旁边的节点

例如,考虑这个列表:

first -> a -> b -> c

如果你想先交换b,那么你也必须更新a和c的下一个和前一个引用。

编辑:这段代码应该放在你做交换的代码之前和布尔声明之后

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
}

相关内容

  • 没有找到相关文章

最新更新