我需要在双向链接列表中创建一个删除方法。我遇到了麻烦,因为我认为我需要有4个案例。
这是我到目前为止的代码。
public void delete(Node n) {
if (head == null) {
System.out.println("the list is empty");
} else if (head != null) {
head = n;
Node newHead = n.next;
newHead = head;
} else if (n.next == null) {
Node beforeTail = n.previous;
beforeTail.next = null;
} else if (n.next != null || n.previous != null) {
Node inFront = n.previous;
Node inBack = n.next;
inFront.next = inBack;
inBack.previous = inFront;
} else {
System.out.println("error");
}
}
以下是测试程序:
public class TestLL {
public static void main(String[] args){
/*Create a bunch of free standing nodes */
Node n1= new Node(new Integer(11));
Node n2= new Node(new Integer(12));
Node n3= new Node(new Integer(13));
Node n4= new Node(new Integer(14));
Node n5= new Node(new Integer(15));
Node n6= new Node(new Integer(16));
Node n7= new Node(new Integer(17));
/* link them */
LL myLL =new LL();
myLL.printList(); // prints "empty list"
myLL.add(n1); //11
myLL.add(n3); //13
myLL.add(n5); //15
myLL.add(n2); //12
myLL.add(n7); //17
myLL.printList(); //should print 11, 13, 15, 12, 17; one per line
System.out.println();
myLL.delete(n3);
myLL.addAfter(n4,n1);
myLL.printList(); //should print 11,14,15,12,17 one per line
System.out.println();
myLL.delete(n7);
myLL.delete(n2);
myLL.printList();//should print 11,14,15 one per line
}
}
我真的不知道该怎么做。此外,我不能使用Java中已有的任何方法。
答案 0 :(得分:1)
很难说但是LL方法看起来不对。通常使用LL不需要任何“节点”意识,因为由实现来处理所有链接细节。调用的代码应该传入它选择的对象。
我希望LL的使用看起来像这样。
LL myLL = new LL();
myLL.add(new Integer(1));
myLL.add(new Integer(2));
// etc
myLL.remove(new Integer(1));
在调用添加新节点(内部类到LL)的过程中,将创建并附加到末尾。删除/删除将搜索LL并删除与传入的对象匹配的第一个实例。
e.g。 LL实现的草图。
class LL
{
private Node headNode = null;
public void add(Object item)
{
// construct a new node
// iterate to the last node and add new node to the end
}
public boolean remove(Object item)
{
// starting at the head node search the list until a node with the matching item is found
// update the node pointers to "remove" the node
}
class Node
{
Node nextNode;
Node prevNode;
Object item;
}
}
我不会填写实现,因为这是作业;)但你是对的,有几个案件需要处理