我创建了双重链接列表,如下所示
connectBluetooth(mDevice);
我必须在节点" 2"
之前插入以下节点要插入的节点 - (8,22,23,15)
Node" 8"在节点" 2"之前已经存在,在这种情况下,我不想插入节点" 8"再次。有没有办法检查"节点插入"是否已存在于节点之前?
我希望最终的DLL为8 <-> 2 <-> 12
答案 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或类似的东西),但应该足以帮助您理解。