2011-11-12 37 views
1
class Node 
    { 
     public int Data { get; set; } 

     public Node Next { get; set; } 

     public int Counter { get; set; } 

     public Node(int element,int counter) 
     { 
       Data = element; 
       Counter = counter; 
       Next=null; 
     } 
    } 

我使用計數器作爲人的標記,或換句話說,消除開始的位置。如何解決使用循環鏈表的約瑟夫斯消除

class CircularLinkedList 
{ 
    Node first; 
    Node last; 

    public CircularLinkedList() 
    { 
     first = last = null; 
    } 

    protected void Insert(int element,int counter) 
    { 
     if (IsEmpty()) 
     { 
      first = last = new Node(element,counter); 
     } 
     else 
     { 
      last.Next = last = new Node(element,counter); 
      last.Next = first; 
     } 
    } 

    public int RemoveAt(int index) 
    { 
     int value = 0; 
     Node current = first; 
     do 
     { 
      if (current.Counter == index) 
      { 
       value = current.Data; 
      } 
      current = current.Next; 
     } while (current != first); 
     return value; 
    } 

    public void AddMen(int n) 
    { 
     for (int i = 1; i <= n; i++) 
     { 
      Insert(i*2,i); 
     } 
    } 

    public int Eliminate(int m) 
    { 
     int value = 0; 
     Node current = first; 
     do 
     { 
      value = RemoveAt(m); 

      current = current.Next; 

     } while (current != first); 
     return value; 
    } 

    public bool IsEmpty() 
    { 
     return first == null; 
    } 

    public void Display() 
    { 
     Node current = first; 
     do 
     { 
      Console.WriteLine(current.Counter+" "+current.Data+" "); 
      current = current.Next; 
     } while (current!=first); 
    } 
} 

我有消元法的問題,我想它必須不斷調用,直到列表爲空,

回答

1

我會做:

public int Eliminate(int m) 
{ 
    int value = 0; 
    Node current = first; 
    Node nextNode; 



    do 
    { 
    nextNode = current.next; 
     value = RemoveAt(m); 

     current = nextNode; 

    } while (current != first); 
    return value; 
} 
相關問題