2017-08-14 57 views
-1

我正在解决C#中链接列表数据结构中的一个程序,我需要检查给定的链接列表是NULL终止还是循环结束。 我想检查它与不同的测试用例,但无法将循环链表作为输入。我们可以将两个节点的地址分配为C#中一个LinkedListNode的下一个节点吗?

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

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

不确定问题出在哪。 Hackerrank已经有一个在线验证工具,可以调用你提供的代码,你究竟在问什么? –

+0

如果你想写类似的东西并想构建测试用例,你将不得不向我们展示一些代码。你说你无法将循环链表作为输入?为什么不?编译器会阻止你吗?你难以想出写什么?询问头脑想知道。 –

+0

您更新的问题代码与图片不符。 'AddAfter'将在item3和item 4之间插入项目。不可能用内置的'LinkedList <>'创建循环链表。 –

回答

-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 
     { 
     } 
+0

这不是创建一个循环,它只是重复列表中的一个元素,然后终止。 – Servy

+0

不可以。您可以按照需要将相同的对象两次添加到列表中。链表将包含3个对象(不是4)。 – jdweng

+0

问题问如何在列表中创建一个循环,而不是如何将一个项目添加到列表两次。 – Servy

1

这是不可能创建一个循环,LinkedList<>都建立了LinkedListNode<>这些节点包含item值以及用于导航的List,Next和Previous,这些成员只有内部设置器,因此您无法手动分配这些设置器。但是,当我们在LinkedList上调用AddFirstAddLastAddAfterAddBefore时会设置这些值。

在理论上,我们可以设置第一个和最后一个是同一个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“。异常

相关问题