我正在 c# 中从链表数据结构中解决一个程序,我需要检查给定的链表是否以 NULL 终止或以循环结尾。 我想用不同的测试用例检查它,但无法传递循环链表作为输入。
如何将循环链表作为输入传递?
来自黑客等级的问题会给你一个想法,我想实现什么?
这是我实现图像中显示的链表的代码
private static LinkedList<int> InitializeLinkedList ()
{
LinkedList<int> linkedList = new LinkedList<int>();
LinkedListNode<int> item1 = new LinkedListNode<int>(1);
LinkedListNode<int> item2 = new LinkedListNode<int>(2);
LinkedListNode<int> item3 = new LinkedListNode<int>(3);
LinkedListNode<int> item4 = new LinkedListNode<int>(4);
LinkedListNode<int> item5 = new LinkedListNode<int>(5);
LinkedListNode<int> item6 = new LinkedListNode<int>(6);
linkedList.AddLast(item1);
linkedList.AddLast(item2);
linkedList.AddLast(item3);
linkedList.AddLast(item4);
linkedList.AddLast(item5);
linkedList.AddAfter(item3, item6);
return linkedList;
}
不可能创建一个循环,LinkedList<>是用LinkedListNode构建的<>这些节点包含项目值以及用于导航的列表,下一个和上一个,这些成员只有内部资源库,因此您无法手动分配这些资源库。然而,当我们在链表上调用AddFirst
、AddLast
、AddAfter
或AddBefore
时,这些设置。
理论上,我们可以将第一个和最后一个设置为相同的 LinkedListNode
var item1 = new LinkedListNode<string>("one");
var item2 = new LinkedListNode<string>("two");
var item3 = new LinkedListNode<string>("three");
var list = new LinkedList<string>();
list.AddFirst(item1);
list.AddAfter(item1, item2);
list.AddAfter(item2, item3);
list.AddLast(item1);
但是如果我们尝试以下操作,我们将得到"未处理的异常:System.InvalidOperationException:LinkedList 节点已经属于 LinkedList。例外
尝试以下操作:
static void Main(string[] args)
{
LinkedList<Node> ll = new LinkedList<Node>();
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
ll.AddLast(node1);
ll.AddLast(node2);
ll.AddLast(node3);
ll.AddLast(node2);
}
public class Node
{
}