2015-04-01 6 views
0

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

У меня-структуру, как, например, в файле заголовка:

struct test{ 
char * name; 
char * type; 
struct test * next; 
}; 

И у меня есть функция в отдельном файле .c, как таковой:

//NOTE Correct memory is allocated in other parts of the program 
//(i.e not in this function) 
//Also values are initialized in other functions...etc 

test * removeLastItem(test * head) 
{ 
    test * parent, * cursor; 

    if(head == NULL) //if list is empty return NULL 
    { 
     return NULL; 
    } 

    else 
    { 
     while(cursor->next != NULL) //untill last item of the list is found.. 
    { 
     parent = cursor; //parent equal to current element 
     cursor = cursor->next; //current element set to next pointer of current element 
    } 

    parent->next = NULL; //parent next pointer is now null 
} 

return head; //return the head of the list 
} 

Я m не совсем уверен, что моя верность здесь верна, но я должен вернуть голову списка, что, я считаю, я делаю. Любая помощь приветствуется.

+0

Пожалуйста, инициализируйте курсор на что-то действительное перед использованием '->' оператора. 'cursor' используется неинициализированным. –

ответ

1
  1. Вы не инициализировали cursor.
  2. Не просачивайте удаляемый узел. Вероятно, здесь должен быть звонок free().
  3. Подумайте, что вам нужно вернуть, если ваш список содержит только одну запись.
+0

Мне нужно установить родительский элемент равным текущему элементу (например, курсору), чтобы сделать это, я бы просто инициализировал курсор в начале программы с помощью курсора = head? – user3739406

+0

Также вы определяете тип «struct test», но ваши функции выполняют тип «тест». Это не обязательно один и тот же тип. Где определяется «тест»? –

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