2012-09-18 34 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(); –