我正在尝试用 Java 实现 Knuth 的 Dancing Links 算法。
根据 Knuth 的说法,如果x是一个节点,我可以通过 C 中的以下操作完全取消链接节点:
L[R[x]]<-L[x]
R[L[x]]<-R[x]
Run Code Online (Sandbox Code Playgroud)
并通过以下方式恢复取消链接:
L[R[x]]<-x
R[L[x]]<-x
Run Code Online (Sandbox Code Playgroud)
我的主要方法中做错了什么?
Java中如何实现取消链接和恢复?
这是我的主要方法:
///////////////
DoublyLinkedList newList = new DoublyLinkedList();
for (int i = 0; i < 81; i++) {
HashSet<Integer> set = new HashSet<Integer>();
set.add(i);
newList.addFirst(set);
}
newList.displayList();
// start at 69
newList.getAt(12).displayNode();
//HOW TO IMPLEMENT UNLINK?
//newList.getAt(12).previous() = newList.getAt(12).next().previous().previous();
//newList.getAt(12).next() = newList.getAt(12).previous().next().next();
newList.displayList();
//HOW TO IMPLEMENT REVERT UNLINK?
//newList.getAt(12) = newList.getAt(12).next().previous();
//newList.getAt(12) = newList.getAt(12).previous().next();
System.out.println();
///////////////
Run Code Online (Sandbox Code Playgroud)
这是 DoubleLinkedList 类: …