交换元素双重链表

时间:2011-10-26 23:05:50

标签: java linked-list

我实现了选择排序,我需要交换元素。 我有以前和下一个链接的双重链接列表。 并链接到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节点之后排序后不会覆盖任何元素。

1 个答案:

答案 0 :(得分:2)

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

例如,请考虑以下列表:

首先 - > a - > b - > ç

如果您希望先交换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
}