2014-10-17 269 views
0

我想要創建一個循環鏈接列表的方法,本質上模仿令牌環網絡。我創建一個0或1的隨機數,如果它是0,它將刪除列表中的第一個項目。如果它是一個,它只是說他們仍然登錄。通過循環列表循環Java

所以我應該有這樣的事情..上 用戶B註銷 用戶A註銷

當列表是明確表示終止

問題是,它似乎

登錄的用戶總是讓一個特定的用戶......我怎樣才能做到這一點?

public void log(){ 
     if(start==null) 
      System.out.println("List is empty.."); 
     else{ 
     Node temp=start; 

     System.out.print("->"); 
     //get rid of each user with a similar method but with a random user removed.... 
     while(temp.next!=null && count>0) 
     { 



      int r = rand.nextInt(2); 

      if(r==0) 
      { 

       deleteAt(0); 
       System.out.println(" OFF"+temp.data); 



      } 

      else if(r==1) 
      { 
        System.out.println(" ON "+temp.data); 


      } 
      temp=temp.next; 
     } 
       //System.out.println(counter); 

    } 
} 

    public void deleteFirst() { 
     Node temp=start; 
     while(temp.next!=start){ 
     temp=temp.next; 
    } 
    temp.next=start.next; 
    start=start.next; 
    count--; 
} 




    public void deleteAt(int position){ 
     Node current=start; 
     Node previous=start; 

     for(int i=0;i<position;i++){ 
     if(current.next==start) 
      break; 
     previous=current; 
     current=current.next; 
    } 

    if(position==0) 
     deleteFirst(); 
    else 
     previous.next=current.next; 
    count--; 
} 
+0

可能應該驗證是否還有一個項目,因爲temp = temp.next引用本身讓我頭疼它的思考。 – 2014-10-17 21:01:23

+0

那不僅僅是將溫度設定爲臨時溫度?不是很好的做法,但不會影響程序,我錯了嗎? – user3020002 2014-10-17 21:04:15

+0

你的'deleteAt()'方法如何重新賦值'next'?特別是,當你回到一個項目列表,它是否使'lastItem.next = lastItem'? – azurefrog 2014-10-17 21:07:28

回答

0

從循環鏈表中刪除最後一個元素是一種特殊情況,因爲您需要將start設置爲null。所以你需要在你的刪除例程中滿足這個要求:測試start->next == start

除此之外,在刪除元素時循環遍歷列表需要特別注意:log()中外部循環中的temp可以指向已刪除的元素,而不是列表中的元素。以temp=temp->next然後可能無效。

另外,count在deleteAt(0)中遞減兩次。