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

How to remove the last item in a linked list?

我正在开发链表程序,并试图删除最后一项。我尝试了下面的功能,但它有问题并导致段错误。

我在头文件中有这样的结构:

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
}

我不太确定我的意思在这里是否正确,但我需要 return 列表的头部,我相信我正在做。任何帮助将不胜感激。

  1. 您没有初始化 cursor
  2. 不要泄露您删除的节点。这里某处可能应该有一个 free() 调用。
  3. 想想如果您的列表只有一个条目,您需要 return。