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

如何使用类在c#中的链表中创建并声明链表?,c#,linked-list,C#,Linked List,因此,我试图在链表的每个元素中创建一个链表,但我不知道如何用元素填充内部列表 我首先像这样声明外部列表 RoomList<int> room = new RoomList<int>(); 但我不知道如何添加DailyListElement。我希望这是有道理的 因此,我想了解如何用DailyList元素填充DailyList。您需要向RoomList和DailyList类添加方法add public class RoomList<T> { public

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

我首先像这样声明外部列表

RoomList<int> room = new RoomList<int>();
但我不知道如何添加DailyListElement。我希望这是有道理的


因此,我想了解如何用DailyList元素填充DailyList。

您需要向
RoomList
DailyList
类添加方法
add

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 newItem=newDailyList();
如果(head!=null)head.next=newItem;
head=新项目;
返回新项目;
}
公共类每日列表
{
下一步是公众日报;
公共日报社社长;
公共DailyListElement添加()
{
var newItem=new DailyListElement();
如果(head!=null)head.next=newItem;
head=新项目;
返回新项目;
}
公共类DailyListElement
{
公共数据;
其次是公共每日列表;
}
}
}
用法示例:

var roomList = new RoomList<string>();
var dailyList = roomList.Add();
var dailyListElement = dailyList.Add();
dailyListElement.data = "StackOverflow rocks!";
Console.WriteLine(roomList.head.head.data);
var roomList=new roomList();
var dailyllist=roomList.Add();
var dailyListElement=dailyList.Add();
dailyListElement.data=“StackOverflow rocks!”;
Console.WriteLine(roomList.head.head.data);
输出:

堆积如山的岩石


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

您可以通过遍历元素直到到达第一个元素,其中next为null,然后将新元素分配给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);
            }
        }
    }
}
链表结构

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

公共教室列表,其中T:class
{
私人日报;
私人日报社社长;
公共作废添加(每日列出新项)
{
如果(当前!=null)
current.next=newItem;
当前=新项目;
if(head==null)
水头=电流;
}
公共IEnumerable GetAllNodes()
{
每日列表电流=水头;
List lst=新列表();
while(当前!=null)
{
第一次添加(当前);
当前=当前。下一步;
}
返回lst;
}
公共类每日列表
{
下一步是公众日报;
私人日报社社长;
私有每日列表元素当前;
公共无效添加(DailyListElement新项)
{
如果(当前!=null)
current.next=newItem;
当前=新项目;
if(head==null)
水头=电流;
}
公共IEnumerable GetAllNodes()
{
DailyListElement电流=水头;
List lst=新列表();
while(当前!=null)
{
第一次添加(当前);
当前=当前。下一步;
}
返回lst;
}
公共类DailyListElement
{
公共数据;
其次是公共每日列表;
}
}
}
客户端代码:

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);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
var lst=新房间列表();
var upperNode=new RoomList.dailyllist();
var元素=new RoomList.DailyList.DailyListElement();
element.data=“第一”;
添加(元素);
元素=新的RoomList.DailyList.DailyListElement();
element.data=“第二”;
添加(元素);
lst.Add(上节点);
upperNode=新建RoomList.DailyList();
元素=新的RoomList.DailyList.DailyListElement();
element.data=“第三”;
添加(元素);
元素=新的RoomList.DailyList.DailyListElement();
element.data=“第四”;
添加(元素);
lst.Add(上节点);
foreach(lst.GetAllNodes()中的变量项)
{
foreach(item.GetAllNodes()中的var子节点)
{
Console.WriteLine(子数据);
}
}
}
}
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);
            }
        }
    }
}