2013-10-16 5 views
2

나는 둘러 보았고 이해할 수있는 대답을 찾지 못하거나 내게 해당되지 않습니다. 나는이 수업이 있습니다연결된 목록을 반복하는 방법

class Node 
{ 
    public int value; 
    public Node next; 
} 

을 그리고 단일 연결리스트의 머리 head라는 멤버 변수를 가지고있다. 이제 연결된 목록의 다른 노드를 반복하여 특정 value을 검색하려고합니다. 내가 수동으로 할 경우 head.next.next.next.next.value 만약 내가 5 노드의 value을 원한다면 알아. 이 신속하게 매우 큰 크기의 연결된 목록에 대한 내 질문은 지름길이 될 수 있습니다. 그래서 어떻게 내가 연결된 목록의 각 노드에서 value 변수를 확인할 수 있도록 이것을 통해 반복 할 몇 가지 루프를 만들 수 있습니까?

답변

4

을 위해 할 방법을 수행해야합니다

var currentNode = head; 
while ((currentNode != null) && (currentNode.Value != desiredValue)) 
    currentNode = currentNode.next; 

while 루프가 완료되면, currentNode이 될 것입니다 null이거나 원하는 값을 가진 노드를 포함해야합니다. 내가 그것을했을 때

Node tmp = head; 
while (tmp != null) 
{ 
    //do your checking... 
    tmp = tmp.next; 
} 
+0

당신이 더 빨리 게시했기 때문에 :) 모두에게 내가 찾고있는 대답이 있지만 내 질문에 언급 한 desiredValue도 포함되어 있기 때문에 좀 더 자세하게 설명되어 있습니다. –

1

이러한 종류의 목록의 경우 일반적으로 머리글로 시작하는 현재 노드에 대한 참조를 유지하고 각 반복 후에 해당 참조의 값을 next 노드로 변경합니다. currentNodenull이되면 마지막 요소에 다음 요소가 없으므로 목록의 끝에 도달했습니다. 이 같은

뭔가 :

  • List<T>, 내부 요소를 저장하는 배열을 사용하여 무작위 제공 : 그런데

    는 BCL 이미 작업의 종류에 대한 몇 가지 유용한 클래스가 포함되어 있습니다 그들에 대한 액세스

  • LinkedList<T>, 이는 사용자 정의 클래스와 동일한 원리를 사용합니다.

하지만 어쩌면 당신은 다음과 같이 당신이 클래스를 통해 반복 당신이 어떤 이유로 :)

+1

이것은 영업 이익은하고 있음을 일부 추상 데이터 구조 클래스 아마도이 :) 그들이 나를 하하 목록을 사용하는 것을 허용하지 않을 : –

+1

@ HanletEscaño 예, 당신이 옳을 수 있습니다. 하지만 때로는 다른 언어를 사용하거나 프로그래밍 학습을하는 사람들은 BCL이 이미 제공하는 유용한 클래스를 모두 알지 못합니다. – Botz3000

+0

그럴 수도 있습니다. –

1

이 기본 반복을보십시오.
관련 문제