예, 당신은 루프를 가지고, 불행히도 : 단점은 당신이 대신 같은 것을 할 수 ... 당신이 원하는 것을하지 않을 수 있습니다 LinkedList의 새로운 인스턴스를 생성한다는 것이다. 이것은 추가 된 각 항목에 대해 O (n) 연산 - O (1) 연산입니다.
는
public static class LinkedListExtensions
{
public static void AppendRange<T>(this LinkedList<T> source,
IEnumerable<T> items)
{
foreach (T item in items)
{
source.AddLast(item);
}
}
public static void PrependRange<T>(this LinkedList<T> source,
IEnumerable<T> items)
{
LinkedListNode<T> first = source.First;
foreach (T item in items)
{
source.AddBefore(first, item);
}
}
}
편집 : 에리히의 의견은 제안 당신이 생각하는 이유는 물론 쓰레기 수거 당신도 편리 확장 방법을 쓸 수 :) 것을 대략 할 수도 있지만 - 버퍼를 요구하는 위험이 등이 크기를 조정하지 않고 복사 할 것 이것은 비효율적입니다 - 왜 그냥 첫 번째 목록의 꼬리의 "다음"포인터와 두 번째 머리의 "이전"포인터를 업데이 트하여 두 목록을 함께 가입하지? 글쎄, 두 번째 목록에 무슨 일이 일어날 지 생각해 ... 도 변경되었을 것입니다.
뿐만 아니라 노드의 소유권은 어떻게됩니까? 각각은 본질적으로 두 가지 목록의 일부입니다 ... 그러나 LinkedListNode<T>.List
속성은 그 중 하나에 대해서만 말할 수 있습니다.
어떤 경우에이 작업을 수행해야하는 이유는 알 수 있지만 .NET LinkedList<T>
형식이 기본적으로 빌드 된 방식은 기본적으로 금지되어 있습니다. 나는이 다큐 멘 테이션 코멘트는 가장 잘 설명 생각 :
는 LinkedList<T>)
클래스는 이 일관성 상태 목록을 남길 수 있습니다 분할, 주기, 또는 다른 기능을 체인 지원하지 않습니다.
-1 intellisense 님이 질문에 대한 답변을했을 수도 있습니다. –
링크 된 목록을 추가하는 것은 매우 일반적인 작업으로 보이지 않습니다. 내가 데이터 구조 코스를 다시 기억한다면. 목록과 연결된 목록은 같은 것이 아닙니다. 그들은 다른 목적을 가지고 있습니다. 따라서 행동 (또는 그것의 결핍)은 합리적입니다. –
llist1/llist2가 이중 연결 목록이므로 llist1.AddLast (llist2.First)가 작동하지 않습니다. 이것이 허용 되었다면, 어떤 "이전"노드가 AddLast에 주어진 노드에 의해 참조 될 것입니까? 바로이 이유 때문에 두 목록의 회원이 될 수 없습니다. –