2013-12-13 2 views
-2

Я использую следующий код в связанном списке символов. Но всякий раз, когда я запускаю эту программу, я получаю ошибку времени выполнения.Удаление узла из середины связанного списка

void ldellist(Node *head,char k) 
{ 
    Node *remove=head; 
    Node *previous=head; 
    while(remove->data!=k) 
    { 
     remove=remove->next; 
    } 
    while(previous->next!=remove) 
    { 
     previous=previous->next; 
    } 
    previous->next=remove->next; 
    free(remove); 
} 

Может кто-нибудь сказать мне, в чем проблема?

+1

Добро пожаловать в переполнение стека! Просить людей обнаружить ошибки в коде не особенно продуктивно. Вы должны использовать отладчик (или добавить заявления печати), чтобы изолировать проблему, отслеживая ход вашей программы и сравнивая ее с тем, что вы ожидаете. Как только двое расходятся, вы нашли свою проблему. (И затем, если необходимо, вы должны построить [минимальный тестовый сценарий] (http://sscce.org).) –

+0

Ребята! просто чтобы понять, я знаю, что я удаляю персонажа из середины, а не из головы или хвоста. – user3097890

+0

Как выглядит ваша функция free (Node *)? –

ответ

0

Возможно, вам нужно сделать некоторые проверки?

void ldellist(Node *head,char k) { 
    Node *remove=head; 
    Node *previous=head; 
    while(remove && remove->data!=k) { 
    remove=remove->next; } 
    while(previous && previous->next!=remove) { 
    previous=previous->next; } 
    if (remove) { 
    previous->next=remove->next; 
    free(remove); 
    } else { 
    // print some error like 'not found' 
    } 
} 
0

В случае, когда узел для удаления является голова, вы получите «удалить» равно «головы» и состояние «previous-> следующий! = Удалить» будет всегда верно.

Смежные вопросы