如何删除链表中的最后一项?

时间:2015-04-01 23:07:35

标签: c pointers data-structures linked-list

我正在处理链接列表程序,我正在尝试删除最后一项。我已经尝试了下面的功能,但它有问题并导致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
}

我不确定我的暗示是否正确,但是我需要返回列表的头部,我相信我正在做的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 您没有初始化cursor
  2. 不要泄漏您删除的节点。在某处可能应该有free()电话。
  3. 如果您的列表只有一个条目,请考虑您需要返回的内容。