【问题标题】:Can we assign address of two nodes as a next of a one LinkedListNode in C#?我们可以在 C# 中将两个节点的地址分配为一个 LinkedListNode 的下一个吗?
【发布时间】:2018-01-22 12:08:52
【问题描述】:

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

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

Problem from hackerrank 会给你一个想法,我想要实现什么?

这是我实现链表的代码,显示在image

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

【问题讨论】:

  • 不确定是什么问题。 Hackerrank 已经有一个在线验证工具,它会调用你提供的代码,你具体要问什么?
  • 如果您正在尝试编写类似的东西并想要构建测试用例,您将不得不向我们展示一些代码。你说你不能将循环链表作为输入传递?为什么不?编译器会阻止你吗?您是否很难弄清楚要写什么?好奇的人想知道。
  • 您更新的问题代码与图片不匹配。 AddAfter 将在 item3 和 item 4 之间插入 item。使用内置的 LinkedList&lt;&gt; 创建循环链表是不可能的。
  • “无法将循环链表作为输入传递” - 为什么不呢,这是代码问题吗?如果您发布的代码与您的问题相关,我不知道如何。

标签: c# data-structures linked-list cycle-detection


【解决方案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
        {
        }

【讨论】:

  • 这不是创建循环,它只是重复列表中的一个元素然后终止。
  • 没有。您正在将相同的对象两次添加到列表中,就像您想要的那样。链表将包含 3 个对象(不是 4 个)。
  • 问题问的是如何在列表中创建一个循环,而不是如何将一个项目添加到列表中两次。
【解决方案2】:

不可能创建循环,LinkedList<> 是由LinkedListNode<> 构建的'不要手动分配这些。然而,当我们在 LinkedList 上调用 AddFirstAddLastAddAfterAddBefore 时,这些设置。

理论上我们可以将 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。”例外

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2021-11-07
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多