2015-03-06 11 views
0

У меня есть следующий код:Возврат суммы значений в связанном списке

int sum(LinkedList * list) { 

    assert(list!=NULL); 

    Node *currentNode = list->head; 
    int sum = 0; 

    for (currentNode = currentNode->next; currentNode !=NULL; currentNode = currentNode -> next) { 
     sum = sum + currentNode->data; 

     } 
    return sum; 

} 

Я хочу, чтобы вернуть сумму всех значений в связанном списке * списке. Тем не менее, я продолжаю получать ошибку сегментации. Может ли кто-нибудь помочь мне определить фатальную ошибку?

+4

Не уверен в ошибке, но вы пропускаете первый элемент списка, потому что вы начинаете цикл с 'for (currentNode = currentNode-> next;'. Оно должно быть 'for (currentNode = list -> head; ' – Barmar

+1

Вы никогда не проверяете, имеет ли значение' list-> head' значение NULL. –

+0

Возможно, было бы более читаемым пропустить установку 'currentNode' до цикла for:' for (currentNode = list-> head; currentNode ! = NULL; currentNode = currentNode-> next) ' –

ответ

3

Изменить петлю на:

for (currentNode = list->head; currentNode !=NULL; currentNode = currentNode -> next) { 
    sum = sum + currentNode->data; 
} 

Это позволит решить две проблемы:

  1. Он проверит, что list->head не NULL;
  2. Он не пропустит первый элемент в списке при вычислении суммы.
Смежные вопросы