如何使用类在c#中的链表中创建链表,然后在链表中声明链表?

时间:2019-04-25 21:33:30

标签: c# linked-list

因此,我试图在链接列表的每个元素内创建一个链接列表,但我不知道如何用元素填充内部列表。

我首先这样声明外部列表

RoomList<int> room = new RoomList<int>();

这是我使用的类结构(不确定这是否正确)

public class RoomList<T>
{
    DailyList head;

    public class DailyList
    {
        DailyListElement head;
        DailyListElement next;

        class DailyListElement
        {
            public T data;
            public DailyListElement next;
        }
    }
}

这是我用来创建DailyList对象的函数

public void DailyListCreate()
{
    DailyList newDailyList = new DailyList();          
}

但是我不知道如何添加DailyListElement。我希望这是有道理的。

所以我想找出如何用DailyListElements填充DailyList。

3 个答案:

答案 0 :(得分:0)

您需要实现一个将添加新元素的方法。

您可以通过遍历元素直到到达第一个(其中next为空)的元素来完成此操作,然后将新元素分配给next。 或者,您也可以维护指向最后一个元素的指针并直接访问它。

答案 1 :(得分:0)

我根据您提供的代码尝试了链接列表中的链接列表。在其中,我添加了添加新节点并获得两个级别(外部和内部链接列表)所有节点的方法。请在下面找到链表结构的代码以及客户端代码:

链接列表结构

public class RoomList<T> where T : class
{
    private DailyList current;
    private DailyList head;

    public void Add(DailyList newItem)
    {
        if(current != null)
            current.next = newItem;
        current = newItem;
        if(head == null) 
            head = current;
    }

    public IEnumerable<DailyList> GetAllNodes() 
    {
        DailyList current  = head;
        List<DailyList> lst = new List<DailyList>();
        while (current != null) 
        {
            lst.Add(current);
            current = current.next;
        }
        return lst;
    }

    public class DailyList
    {
        public DailyList next;
        private DailyListElement head;
        private DailyListElement current;

        public void Add(DailyListElement newItem)
        {
            if(current != null)
                current.next = newItem;
            current = newItem;
            if(head == null) 
                head = current;
        }

        public IEnumerable<DailyListElement> GetAllNodes()
        {
            DailyListElement current  = head;
            List<DailyListElement> lst = new List<DailyListElement>();
            while (current != null) 
            {
                lst.Add(current);
                current = current.next;
            }
            return lst;
        }

        public class DailyListElement
        {
            public T data;
            public DailyListElement next;
        }
    }
}

客户端代码:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var lst =new RoomList<string>();

        var upperNode = new RoomList<string>.DailyList();

        var element = new RoomList<string>.DailyList.DailyListElement();
        element.data = "first";
        upperNode.Add(element);

        element = new RoomList<string>.DailyList.DailyListElement();
        element.data = "second";
        upperNode.Add(element);

        lst.Add(upperNode);

        upperNode = new RoomList<string>.DailyList();

        element = new RoomList<string>.DailyList.DailyListElement();
        element.data = "third";
        upperNode.Add(element);

        element = new RoomList<string>.DailyList.DailyListElement();
        element.data = "fourth";
        upperNode.Add(element);

        lst.Add(upperNode);

        foreach(var item in lst.GetAllNodes())
        {
            foreach(var child in item.GetAllNodes())
            {
                Console.WriteLine(child.data);
            }
        }
    }
}

答案 2 :(得分:-1)

您需要将方法Add添加到RoomListDailyList类中。

public class RoomList<T>
{
    public DailyList head;

    public DailyList Add()
    {
        var newItem = new DailyList();
        if (head != null) head.next = newItem;
        head = newItem;
        return newItem;
    }

    public class DailyList
    {
        public DailyList next;
        public DailyListElement head;

        public DailyListElement Add()
        {
            var newItem = new DailyListElement();
            if (head != null) head.next = newItem;
            head = newItem;
            return newItem;
        }

        public class DailyListElement
        {
            public T data;
            public DailyListElement next;
        }
    }
}

用法示例:

var roomList = new RoomList<string>();
var dailyList = roomList.Add();
var dailyListElement = dailyList.Add();
dailyListElement.data = "StackOverflow rocks!";
Console.WriteLine(roomList.head.head.data);

输出:

  

StackOverflow震撼了!