2012-04-18 33 views
0

我只需要在C#中的linkedlists一些幫助,C++中的鏈表是很容易與指針,但即時通訊面臨一些問題,在C# 我讀了http://msdn.microsoft.com提供的例子,但我想不出如何鏈接兩個不同的鏈表LinkedLists鏈接

的efficitent方式似乎有一個LinkedListNode成一個鏈表,所以可以說我有兩個鏈表

LinkedList的L1 =新的LinkedList(); LinkedList L2 = new 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 &放大器; LT;字符串>。接下來」不能被分配到 - 它是隻讀

好吧我想這則:

Ln2.Next = Ln3; 我又失敗了

我最後一次嘗試是

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

一個錯誤:屬性或索引器「System.Collections.Generic.LinkedL istNode & 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 2012-04-18 20:54:37

回答

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 2012-04-18 21:12:31

+0

美麗的工作!謝謝你:) – DarkElieDraven 2012-04-18 21:44:15

1

回答你的第一個問題,L1的最後一個元素鏈接到L2

的第一要素
L2.AddFirst(L1.Last.Value); 
+0

這將只在L2的開頭添加一個新節點。 – 2012-04-18 21:23:06

+0

是的!好吧,我想把它們連在一起,不僅僅是第一個元素,而是整個列表,但似乎不可能做到。謝謝 – DarkElieDraven 2012-04-18 21:43:15