2009-06-22 3 views
14

순환 연결된 목록이 필요하므로 LinkedList이 순환 연결된 목록인지 궁금합니다..NET의 LinkedList는 순환 링크 된 목록입니까?

+0

@ 존은, 참고로 나는 문서를 읽을 수 있지만 당신은 아무것도 알고 있다면, 당신이 물어 유효한 질문이다 알 것입니다, 고려 LinkedList 구현은 매우 다양합니다. –

+0

좋아, 나는 원형 링크 된 목록의 의미를 지정하고 MSDN 설명서를 통해 명확하게 알 수없는 이유가 될 때까지 -1을 철회합니다. 그렇게하면 Microsoft에 설명서 수정 방법을 알려줍니다. –

+0

충분합니다. 나는 MS가 용어를 올바르게 사용했다면 나는 정말로 신뢰하지 않았다고 생각한다. 때때로 BCL에 대한 클레임이 유효하지 않다는 것을 알고 있습니다. 사소하지만 여전히 확신하고 싶었습니다. –

답변

14

아니요 이중 연결 목록이지만 순환 연결 목록은 아닙니다. MSDN for details on this을 참조하십시오.

LinkedList <T>은 자신의 순환 링크 된 목록을위한 좋은 토대가됩니다. 그러나 그것은 명확한 First and Last 속성을 가지고 있으며, 이것들을 열거하지는 않을 것입니다. 이것은 적절한 순환 링크리스트가 될 것입니다.

4

아니요, 아닙니다.

+1

첫 번째 예, 지금은 아니요 .... 당신은 이중으로 혼란스럽고 순환으로 연결됩니다. – leppie

+0

예! 죄송합니다. 이제 해결되었습니다. –

6

순환 데이터 구조가 필요한 경우 C5 generic collections library을 살펴보십시오. 그들은 circular queue (당신을 도울지도 모른다)을 포함하여 그곳에서 상상할 수있는 컬렉션을 가지고 있습니다.

47

당신이 목록에서 "다음"조각을 이동할 때마다 순환 방식에서 사용에 대한 빠른 해결책 : 현재는 LinkedListNode<T>입니다

current = current.Next ?? current.List.First; 

.

+5

매끄러운입니다. 나는 그것을 좋아한다. –

3

LinkedList의 공개 API는 순환 적이 지 않지만 실제로는 내부적입니다. reference source 컨설팅, 당신은 그것을 구현 어떻게 볼 수 있습니다 : 물론

// 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; 
} 
+0

저는이 질문이 오래되었다는 것을 알고 있습니다.하지만 .NET의 오픈 소스가 최근 이었기 때문에, 후드에서 무슨 일이 벌어지고 있는지 알면 좋다고 생각합니다. –

관련 문제