LinkedListのフレームワーク実装のすべてのノードには、それを含むリストへの参照があり、リンクリスト実装の目的を無効にする別のリストO(n) instead of O(1)に要素を転送します。この実装で要素を別のリストに転送したい場合は、リストのRemoveとAddAfterを使用して1つずつ削除して追加し、それぞれが別のリストへの参照を取得する必要があります。
私はこれがあなたの後ではないと思う。他のコメントが述べているように、あなたのリストの必要性はおそらく、あなたがもっと簡単なリンクリストを作成する方が良いほど簡単です。そしてその質問は既にSO(Creating a very simple linked list)のどこかで取り上げられています。
この回答には簡単な列挙と初期化は含まれていないので、私は自分で作成しました。
class ListNode<T> : IEnumerable<T>
{
public T data;
public ListNode<T> Next;
private ListNode() { }
public ListNode(IEnumerable<T> init)
{
ListNode<T> current = null;
foreach(T elem in init)
{
if (current == null) current = this; else current = current.Next = new ListNode<T>();
current.data = elem;
}
}
class ListEnum : IEnumerator<T>
{
private ListNode<T> first;
private ListNode<T> current;
bool more;
public ListEnum(ListNode<T> first) { this.first = first; more = true; }
public T Current { get { return current.data; } }
public void Dispose(){}
object System.Collections.IEnumerator.Current { get { return current.data; } }
public void Reset() { current = null; more = true; }
public bool MoveNext()
{
if (!more)
return false;
else if (current == null)
return more = ((current = first) != null);
else
return more = ((current = current.Next) != null);
}
}
public IEnumerator<T> GetEnumerator()
{
return new ListEnum(this);
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
static void Main(string[] args)
{
ListNode<int> l1 = new ListNode<int>(new int[] {3,1,4,1,5,9});
ListNode<int> l2 = new ListNode<int>(new int[] { 5 });
l2.Next = l1.Next;
foreach (int i in l2)
Console.WriteLine(i);
}
問題の詳細な例をコードとして表示します。 – mybirthname
'LinkedList'クラスのメソッドを使う必要があります。 – juharr
できません。 2番目のリストを最初のリストに追加するか、または他のリストを指すプロパティを含むクラスを作成する必要があります。クラスはLinkListオブジェクトを継承して、メインリストを列挙できます。 – jdweng