2012-04-25 2 views
2

이 질문은 아마도 가장 인기있는 질문 중 하나이며 솔루션을 검색하는 동안 많은 것을 발견했지만 아래 코드가 가장 적합했습니다.연결된 목록 반전에서 한 줄을 변경하면 오류가 발생합니다.

실제로 실제로하는 일은 다른 목록을 만들고 이전 목록을 반복하고 항상 새 목록의 머리에 요소를 추가하는 것입니다. 이 코드를 보지 않고이 아이디어를 다시 구현하기로 결정

Node *reverseList(Node *oldList) 
{ 
    Node* newList=NULL; 

    while(oldList!=NULL) 
    { 
     Node *temp=oldList; 
     oldList=oldList->next; 

     temp->next=newList; 
     newList=temp; 
    } 
    return newList; 
} 

그러나 나는 oldList=oldList->next;의 변경된 장소를했습니다 그것은 내 질문은 newList=temp.

후 정말 달라 지나요됩니다 넣어? 나는 결국 당신이 oldList를 통해 반복하고 있기 때문에 이유를 이해할 수 없었다. 왜 즉시 완료해야합니까 * 선언 후?

+1

귀하의 질문이 무엇인지 잘 모르겠습니다. 코드의 순서를 변경하면 코드의 동작이 변경된다는 말입니까? * 모든 링크드리스트 조작 문제를 합리화하는 방법은 한 장의 종이에 여러 상자와 화살표를 그려 넣는 것입니다. –

답변

2

같은 장소에서

Node *temp = oldList; 

모두 포인터 지점을 수행 한 후. (이이 단계에서 온도와 같은 일을 가리키는 때문에)

temp->next = newList; 

이 oldList의 다음 포인터를 덮어 쓰기 때문에, 당신은 먼저 다음 포인터에서 oldList를 업데이트해야합니다.

+0

큰 설명에 감사드립니다. – Ali

관련 문제