2013-06-10 2 views
1

여기 목록을 반복적으로 역전하려고합니다. 그러나 문제는리스트가 3-> 2-> 4-> NULL이라는 말의 크기가 크다는 것입니다. 결국 3 -> NULL, 즉 하나의 요소 만있는 목록이됩니다. 코드의 문제점을 알려주십시오.목록 반전 - 논리 오류

struct node *reverselist(struct node *head) 
{ 
    struct node *list=head; 
    if(head==NULL) 
    { 
      printf("\nThe list is empty\n"); 
      return head; 
    } 
    if(head->next==NULL) 
    { 
      printf("\nThe list has only one element\n"); 
      return head; 
    } 
    struct node *cur=head; 
    struct node *new=head->next; 
    while(cur->next!=NULL) 
    { 
      cur->next=new->next; 
      new->next=cur; 
      new=cur->next; 
     } 
    return list; 
} 

답변

1

당신의 논리는 잘못된 것입니다 - 포인터 new가 제대로 업데이트되지만 cur이 고정됩니다.

당신의 Cur을 반복이

struct node *reverselist(struct node *head) 
{ 
    struct node *temp; 
    struct node *newHead = NULL; 
    struct node *curNode = head; 

    while(curNode != NULL) { 
     temp = curNode->next; 
     curNode->next = newHead; 
     newHead = curNode; 
     curNode = temp; 
    } 

    return newHead; 
} 
+1

좋은 사람. 변수 이름을 실행하는 데 머리를 사용하지 않을 것입니다. 그것은 독자를 혼란스럽게합니다. –

+0

@PeterMiehle Thanx, 네, 조금 혼란스럽고'head'를 움직일 때 읽을 수 없습니다. 최적화하기 위해 노력했습니다. 머리를 움직일 때 더 많은 읽을 수있는 변수를 사용하는 것을 선호합니다. –

0

> 다음 시도의 Cur> 다음 변경 대신에. 먼저 머리와 머리를 바꾸지 마십시오. 머리 뒤에서 마지막 요소를 앞으로 옮깁니다.

+1

나는 실수로 'afert'또는 'after'라고 타이핑 한 것 같습니까? –