如何用循环链表求解约瑟夫消去法


    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;
         }
    }

我使用counter作为person的TAG,或者换句话说,从开始淘汰的位置。

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);
    }
}

我有消除方法的问题,我希望它必须不断调用,直到列表为空,

我会这样做:

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;
}

相关内容

  • 没有找到相关文章

最新更新