.NETのLinkedListは循環リンクリストですか?
-
06-07-2019 - |
質問
循環リンクリストが必要なため、LinkedList
が循環リンクリストかどうか疑問に思っていますか
解決
いいえ。これは二重のリンクリストですが、循環リンクリストではありません。詳細については、 MSDNをご覧ください。
LinkedList <!> lt; T <!> gt;ただし、独自の循環リンクリストの優れた基盤となります。しかし、明確なFirstおよびLastプロパティがあり、これらの周りに列挙されません。これは、適切な循環リンクリストです。
他のヒント
<!> quot; next <!> quot;を移動したいときはいつでも、それを循環的に使用するための簡単なソリューション。リストの一部:
current = current.Next ?? current.List.First;
現在のLinkedListNode<T>
の場合。
循環データ構造が必要な場合は、 C5ジェネリックコレクションライブラリをご覧ください。 。それらには、循環キュー(これが役立つ場合があります)。
いいえ、そうではありません。 MSDNを参照
LinkedListのパブリックAPIは循環的ではありませんが、内部的には実際に循環しています。 参照ソースを参照すると、実装方法:
// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;
もちろん、循環しているという事実を隠すために、リストをトラバースするプロパティとメソッドは、先頭への折り返しを防ぐためのチェックを行います。
LinkedListNode:
public LinkedListNode<T> Next {
get { return next == null || next == list.head? null: next;}
}
public LinkedListNode<T> Previous {
get { return prev == null || this == list.head? null: prev;}
}
LinkedList.Enumerator:
public bool MoveNext() {
if (version != list.version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
if (node == null) {
index = list.Count + 1;
return false;
}
++index;
current = node.item;
node = node.next;
if (node == list.head) {
node = null;
}
return true;
}
所属していません StackOverflow