2012-04-18 3 views
0

Мне просто нужна помощь со связанными списками в C#, связанный список в C++ - это просто с указателями, но im сталкивается с некоторыми проблемами в C# . Я читал примеры, представленные на http://msdn.microsoft.com, но я не мог понять, как связать два различных связанных списковLinkedLists Linking

efficitent путь, кажется, с LinkedListNode в связный список, так что позволяет сказать, что у меня есть два связанных списков

LinkedList L1 = новый LinkedList(); LinkedList L2 = новый LinkedList(); , а затем позволяет сказать, у меня есть следующие узлы

 LinkedListNode<String> Ln1 = new LinkedListNode<String>("Orange"); 
     LinkedListNode<String> Ln2 = new LinkedListNode<String>("Banana"); 
     LinkedListNode<String> Ln3 = new LinkedListNode<String>("Apple"); 
     LinkedListNode<String> Ln4 = new LinkedListNode<String>("Strawberry"); 

Я просто добавил их в списки у меня есть:

 L1.AddLast(Ln1); 
     L1.AddLast(Ln2); 
     L2.AddLast(Ln3); 
     L2.AddLast(Ln4); 

Хорошо, теперь позволяет сказать, что я хочу связать последний элемент L1 к первому один в L2, это возможно? Я пробовал это первым:

L1.Last.Next = L2.First; я полностью потерпел неудачу с ошибкой: Свойство или индексатор «System.Collections.Generic.LinkedListNode & Amp; лт; строка> .next» не может быть назначен - это только для чтения

хорошо Я попытался это тогда:

Ln2.Next = Ln3; я снова не

моя последняя попытка была

 LinkedListNode<String> node1=L1.Last; 
     LinkedListNode<String> node2 = L2.First; 
     node1.Next = node2; 

с ошибкой: Свойство или индексатор «System.Collections.Generic.LinkedLis tNode & amp; lt; string> .Next 'не может быть присвоено - это только чтение

поэтому любая помощь пожалуйста? как их связать?

вопросы о добавлении: есть ли у вас ни одного элемента в связанном списке по индексу, например?

Я вышел с этим простым алгоритмом, и она работает:

  int i = 0; 
     foreach (var item in L2) 
     { 
      Console.WriteLine(item); 
      i++; 
     } 

есть автоматический способ?

спасибо за вашу помощь

+1

Возможный дубликат http://stackoverflow.com/questions/1094445/how-does-one-add-a-linkedlistt-to-a-linkedlistt-in-c – Blau

ответ

2

LinkedListNode имеет список свойств. Это свойство указывает на список, к которому принадлежит узел. Это свойство задается при добавлении узла в некоторый список. Таким образом, в один момент узел может принадлежать только одному списку. Это означает, что вы должны удалить узел из одного списка, прежде чем добавить его к другому:

var node = L2.First; 
L2.RemoveFirst(); 
L1.AddLast(node); 

Если вы хотите, чтобы добавить все узлы из L2, вы можете использовать:

while (L2.Count > 0) 
{ 
    var node = L2.First; 
    L2.RemoveFirst(); 
    L1.AddLast(node); 
} 

Имейте в виду, это будет удалите все узлы из L2.

Другой вариант - создание новых узлов с одинаковыми значениями:

foreach (string value in L2) 
    L1.AddLast(value); 

UPDATE: Если вы хотите, чтобы достичь элемента в связанном списке по его индексу, вы можете просто пропустить первые N элементов и принимать следующий:

L1.Skip(index).First() 

Как и в любой коллекции, вы должны убедиться в том, что этот список содержит не менее N-1 узлов.

+0

Вы правы, спасибо , делая это в пределах петля подсчета L2 сделает работу – DarkElieDraven

+0

красивой !! спасибо человеку :) – DarkElieDraven

1

Ответ на ваш первый вопрос, связать последний элемент L1 к первому элементу L2

L2.AddFirst(L1.Last.Value); 
+0

Это добавит только один новый узел в начале L2. –

+0

да точно! Я хотел связать их не только с первым элементом, но и с целым списком, но это кажется невозможным. спасибо – DarkElieDraven

Смежные вопросы