链表的C#大小(源代码)

时间:2017-09-24 19:55:47

标签: c#

我是计算机科学的第二年。我们的老师要求我们实现MyLinkedList类(即使它在C#中默认存在很难),以提高我们的编程技能(算法)。

我能够实现大部分代码并对其进行测试,但我无法实现返回链表大小的函数。

这是我迄今为止所做的:

class MyLinkedList
{

    class Element
    {
        public float value;
        public Element next;
    }


    Element first;

    public MyLinkedList()
    {
        first = null;
    }

    public void add(float x)
    {
        Element e = new Element();
        e.value = x;
        e.next = first;
        first = e;
    }

    public float get(int i)
    {
        if (first == null)
        {
            throw new Exception("Empty list...no elements inside");
        }
        Element tmp = first;
        for (int j = 0; j < i; ++j)
        {
            tmp = tmp.next;
            if (tmp == null)
            {
                throw new Exception("...");
            }
        }
        return tmp.value;
    }

    public int size()
    {
        // I'm completely lost on that one, I have no clue on how
        // doing it.
    }

}
class MainClass
{
    public static void Main(string[] args)
    {
        //To test the code

        MyLinkedList l = new MyLinkedList();
        l.add(3);
        l.add(5);
        l.add(8);
        Console.WriteLine(l.get(0));
        Console.WriteLine(l.get(1));
        Console.WriteLine(l.get(4));
    }
}

3 个答案:

答案 0 :(得分:2)

我不在我的开发机器上,所以我没试过这个:

public int Count()
{
     int count = 0;
     Element e = first
     while(e != null)
     {
          ++count;
          e =e.next;
     }
     return count;
}

这是你需要的东西。

答案 1 :(得分:1)

试试这段代码:

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    print("Executing background fetch")
    DownloadManager.shared.fetch()
    completionHandler(.newData)
}

答案 2 :(得分:0)

为什么不使用字段来跟踪大小?您可以在添加元素时递增它,并在删除时递减它。

true

这只是一个想法..当然你必须检查你是否真的添加或删除了元素。例如:您正在尝试删除列表中没有的元素。这样做可以避免每次调用size方法时计算大小。