在双链接列表中的某个节点之前插入节点

时间:2016-04-08 08:28:42

标签: java list insert doubly-linked-list

我创建了双重链接列表,如下所示

connectBluetooth(mDevice);

我必须在节点" 2"

之前插入以下节点

要插入的节点 - (8,22,23,15)

Node" 8"在节点" 2"之前已经存在,在这种情况下,我不想插入节点" 8"再次。有没有办法检查"节点插入"是否已存在于节点之前?

我希望最终的DLL为8 <-> 2 <-> 12

1 个答案:

答案 0 :(得分:0)

但是,如果你不想重复系列剧:

当前列表:

  

1↔2↔3

在3之前插入(1,2,4)

想要的结果:

  

1↔2↔4↔3

它变得有点复杂,但并不多。

首先,检查您用作 base 的节点之前的节点是否与任何引入节点相匹配。从最后一个开始(所以你总是重复最长的系列,并避免它)。

如果匹配,请检查其前的其他系列是否匹配。如果是,请从下一个开始(或者添加无,如果它是最后一个);如果没有,请返回第一个步骤。

第二个也是最后一个选择下一个要添加的节点后(如果你没有匹配任何第一个,只需从第一个开始),只需在 base 之前添加它们。

这是伪代码,因为我不知道您的确切实施:

考虑到:

int[] toAdd = {1, 2, 4};

例如,您可以使用递归:

main {
    int from = 0;
    for (int i = toAdd.length - 1; i >= 0; i--) {
        if (checkSerie(toAdd, i, base) {
            from = i;
            break;
        }
    }

    // And add:
    for (int i = from; i < toAdd.length; i++) {
        addBefore(3, toAdd[i]); // Your add method.
    }
}

private boolean checkSerie (int[] toAdd, int index, Node base){
    Node prev = base.prev;
    if (index < 0) {
        return true;
    }

    if (toAdd[index] != prev) {
        return false;
    }

    return checkSeriei (toAdd, index - 1, prev);
}

注意:我还没有对此进行测试,它可能是错误的(可能是错误的-1或类似的东西),但应该足以帮助您理解。