因此,我试图在链接列表的每个元素内创建一个链接列表,但我不知道如何用元素填充内部列表。
我首先这样声明外部列表
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。
答案 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
添加到RoomList
和DailyList
类中。
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震撼了!