-3

我正在从 C# 中的链表数据结构中解决一个程序,我需要检查给定的链表是 NULL 终止还是以循环结束。我想用不同的测试用例检查它,但不能将循环链表作为输入传递。

如何将循环链表作为输入传递?

来自hackerrank的问题会给你一个想法,我想要实现什么?

这是我实现图像中显示的链表的代码

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

2 回答 2

1

创建循环是不可能的,LinkedList<>是用LinkedListNode<>建立起来的,这些节点包含项目值以及用于导航的列表、下一个和上一个,这些成员只有内部设置器,所以你不能手动分配这些。然而,当我们在 LinkedList 上调用、或AddFirst时会设置这些。AddLastAddAfterAddBefore

理论上我们可以将 First 和 Last 设置为相同的 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。” 例外

于 2017-08-14T16:00:19.820 回答
-1

尝试以下:

       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
        {
        }
于 2017-08-14T15:51:44.013 回答