2012-03-30 129 views
-1

我有一個鏈接的學生對象。它基本上是一個將有關學生的數據存儲爲學生對象的數據庫。我遇到的唯一問題是創建removeStudent方法。在下面發佈是我迄今爲止嘗試過的,改變它的不同部分以查看是否發生不同的結果。現在,使用此代碼,我可以刪除我的驅動程序中的學生,但它也會刪除每個學生,然後再刪除我想刪除的那個學生,而只留下數據庫中的學生,而我試圖在學生之後刪除。如何從鏈表中刪除節點?

public void RemoveElements(Object Student) { 

    LinearNode<Object> current = element; 
    LinearNode<Object> temp = current; 




    while (current.getNext() != null) { 

     temp = current; 
     current = current.getNext(); 


     if(current.getElement() == Student) { 


     temp.setNext(current.getNext()); 
     length--; 
     } 
    } 

} 
+0

問題是什麼? – 2012-03-30 00:36:49

+0

他在問題標題中「隱藏它」:「如何從鏈表中刪除節點」(搜索5分鐘後找到它) – surfen 2012-03-30 00:48:02

回答

0

如果當前包含要刪除的對象,則需要獲取對前一個節點的引用,並將它指向下一個節點。所以,你必須

A -> B -> C

和B包含要刪除的項目,你希望你的鏈接列表看起來像

A -> C

有幾件事情是你的代碼錯誤

1)你沒有做上述
2)你沒有在你的while循環中設置前一個。你可以這樣做的權利之前

current = current.getNext();

3)對於代碼

LinearNode<Object> current = element;

在上面,什麼是element

+0

元素是列表的頭部。 – Tigh 2012-03-30 01:01:44

1
public void RemoveElements(Object Student) { 

    LinearNode<Object> current = element; 
    LinearNode<Object> previous = null; 
    //LinearNode<Object>(student); 



    while (current.getNext() != null) { 

     current = current.getNext(); 


     if(current.getElement() == Student) { 

      length--; 
      element = element.getNext(); 
      if (previous != null) { 
       previous.setNext(element.getNext(); 
      } else { 
       //if you have a pointer to the head element place it element.getNext(); 
      } 


     } 
     previous = current; 
    } 

} 
+0

不要爲人做功課。引導他們讓他們理解。 – hvgotcodes 2012-03-30 00:47:35

+0

我沒有檢查列表的結尾,所以這不會完全正常工作,但好點.. – 2012-03-30 00:49:16

+0

+1不做別人的功課。代碼比盲目添加到項目中更好理解。 – Makoto 2012-03-30 00:58:59

0

看起來像element是列表的頭。查看element並更改它的代碼,以便刪除第二項時,element仍指向第一個element,第一個元素指向第三個而不是第二個。

+0

我明白了。我取消了previous.setNext字符串的註釋並設置之前等於當前。它現在有效。無論如何,謝謝大聲笑 – Tigh 2012-03-30 00:57:23

+0

我也改變了以前的溫度線性節點,因爲它似乎更有意義的方式。 – Tigh 2012-03-30 00:59:42