2014-07-19 1 views
0

안녕하세요, 저는 하나의 링크 된 list.My 코드에서 정수 값을 포함하는 대체 노드를 추가하는 코드를 작성하여 문제를 해결하도록 도와주세요.링크 된 목록에 interger 값을 포함하는 대체 노드 추가?

예를 들어 단일 링크 된 목록에 6 개의 노드가있는 경우 3 5 8 6 4 9 o/p는 3 + 8 + 4 및 5 + 6 + 9이어야하며 내 접근 방식이 잘못되었습니다. 그것을 수정하십시오. 코드에서 나는 단지 3 + 8 + 4 즉 하나의 대체 값을 반환 오전? 여기

void add(struct st **ptr) 
{ 
    struct st *curr,*prev; 
    curr=*ptr; 

    while(curr->next!=NULL) 
    { 
     if(curr->next->next->data!=NULL) //checking alternative node is present or 
      //or not and to avoid crash 
     { 

      sum= curr->data + curr->next->next->data; 
     } 

     else 
     { 
      sum= curr->data; 
     } 
     curr= curr->next; 
    } 

    prev=*ptr; 

    while(prev->next !=null) 
    { 
     prev=prev->next; 

     if(prev->next->next->data!=NULL) 
     { 
      sum=prev->data+prev->next->next->data; 
     } 

     else 
     { 
      sum=prev->data; 
     } 
    } 

    return sum;  
} 

답변

1
if(curr->next->next->data!=NULL) 

당신은 또한 curr->next->next를 확인해야합니다은 NULL 없습니다. 또한 if 조건이 올바르지 않습니다. next!=NULLdata보다 확인해야합니다.

그래서 또한

if(curr->next->!=NULL && curr->next->next->data!=NULL) 

if의 업데이트, 프로그램이 충돌하는 이유 GDB 또는 디버그에 다른 디버거를 사용하여 볼을 시도하고 문제점은 무엇인가.

+0

위의 코드에서 두 번째 값을 반환 할 수 있습니다. 첫 번째 대체 숫자 sum 만 반환합니다. 다음 대체 번호도 반환해야합니까? – user3784175

2

우선 함수에서 두 번을 반환 할 수 없습니다. 참조로 호출을 대신 사용할 수 있습니다. 함수 호출 전에 두 개의 합에 대해 두 개의 변수를 만들 수 있습니다. 두 변수의 값을 0으로 초기화하여 참조로 보낼 수 있습니다.

int sum_even = 0; //sum of elements at even position 
int sum_odd = 0; //sum of elements at odd position 
add(&start, &sum_even, &sum_odd); // call by reference 
//sum_even and sum_odd will have the respective sums 

이제 연결된 목록에 문제가 있으면 펜과 종이로 앉아서 작성한 코드 줄을 추적하는 것이 좋습니다. 경계 조건을 테스트하는 것이 필수적입니다. 문제점에 대한 가능한 해결책을 작성했습니다.

void add(struct st **ptr, int *sum_even, int *sum_odd) 
{ 
    struct st *even, *odd; 
    even = *ptr; 
    if(even->next) odd = even->next; 
    else odd = NULL; 
    while(even != NULL) 
    { 
     *sum_even += even->data; 
     if(even->next == NULL) break; 
     even = even->next->next; 
    } 
    while(odd != NULL) 
    { 
     *sum_odd += odd->data; 
     if(odd->next == NULL) break; 
     odd = odd->next->next; 
    } 

}