2012-09-18 33 views
1

我试图创建一个公共布尔删除(E元素)方法,删除包含该元素的第一个节点,如果没有找到这样的节点,它返回false,否则为真...我怎么能去做 ? IM有链接删除的节点的前身它的继任者附近节点的去除产生的空隙麻烦......这是我到目前为止的代码...谢谢单一链接列表删除布尔方法

public class SinglyLinkedList<E> { 
private final SLNode<E> head; 
private final SLNode<E> tail; 
int length; 

// creates an empty list 
public SinglyLinkedList() { 
    head = new SLNode<E>(); 
    tail = new SLNode<E>(); 
    head.setSuccessor(tail); 
    length = 0; 
} 

// adds new node on beginning of the list 
public void add(E element) { 
    SLNode<E> node = new SLNode<E>(element, null); 
    node.setSuccessor(head.getSuccessor()); 
    head.setSuccessor(node); 
} 

// adds new node on beginning of the list 
public void add(SLNode<E> node) { 
    node.setSuccessor(head.getSuccessor()); 
    head.setSuccessor(node); 
} 

@Override 
public String toString() { 
    StringBuilder sb = new StringBuilder(); 
    SLNode<E> cursor = head.getSuccessor(); 
    while (cursor != tail) { 
     sb.append(cursor.getElement()).append(" "); 
     cursor = cursor.getSuccessor(); 
    } 
    sb.append("\n"); 
    return sb.toString(); 
} 
} 

slnode类

public class SLNode<E> { 
private E element; 
private SLNode<E> successor; 

public SLNode() { 
    element = null; 
    successor = null; 
} 

public SLNode(E theElement, SLNode<E> theSuccessor) { 
    element = theElement; 
    successor = theSuccessor; 
} 

public E getElement() { 
    return element; 
} 

public void setElement(E newElement) { 
    element = newElement; 
} 

public SLNode<E> getSuccessor() { 
    return successor; 
} 

public void setSuccessor(SLNode<E> newSuccessor) { 
    successor = newSuccessor; 
} 
    } 
+0

\ * ahem \ *:你有什么试过? – Dancrumb

回答

0

诀窍在于迭代时,您需要保留对前一个元素和当前元素的引用。以前的元素的参考是什么让你关闭的差距:

​​3210
+0

这是我无法理解的地方... SLNode previous = head; SLNode current = head.getSuccessor(); –