2010-08-14 5 views
0

J'essaye de créer 2 liste liée avec un noeud d'intersection commun. Comme je vois c'est une question très chaude dans LinkedList pour trouver le nœud d'intersection. J'ai écrit le code suivant, mais il jette InvalidOperationexception.comment créer des listes liées se croisant en C#?

 LinkedList<int> LL = new LinkedList<int>(); 
     LL.AddFirst(5); 
     LL.AddFirst(4); 
     LL.AddFirst(3); 
     LL.AddFirst(2); 
     LL.AddFirst(1); 

     LinkedListNode<int> sectionNode = LL.Find(3); 
     LinkedList<int> LL2 = new LinkedList<int>(); 
     LL2.AddFirst(100); 
     LL2.AddFirst(90); 
     LL2.AddFirst(80); 
     LL2.AddFirst(sectionNode); 

Quelqu'un pourrait me guider pour savoir comment créer une liste chaînée en Y en C#.

+0

Vous avez des idées intéressantes sur ce qui constitue une «question très chaude». –

+0

Pourquoi ne pas utiliser un arbre? –

Répondre

2

Ce n'est pas pris en charge. Le nœud conserve la trace de son List, auquel vous pouvez accéder via une propriété de saisie seule. Cela signifie qu'un nœud ne peut pas être dans deux listes à la fois, et vous ne pouvez modifier la liste parent qu'en supprimant puis en ajoutant.

Ceci est clairement conçu pour protéger les gens contre les erreurs, mais il rend aussi ce que vous voulez impossible. Notez que LinkedList est doublement lié, donc si cela fonctionnait, vous auriez à choisir arbitrairement à la fois le List et la référence Previous.

Vous pouvez utiliser (ou écrire) une implémentation tierce avec un comportement différent. Par exemple, this code implémente une liste à liaison unique. Les nœuds n'ont pas de références à leur liste contenant, donc un Y devrait convenir.