双链尾部删除o1时间

问题描述

我正在尝试使用尾指针从链接列表的末尾删除,但我似乎无法获取。

typedef struct node
{
    int data;
    struct node *next;
    struct node *prev;
} node;

typedef struct LinkedList
{
    node *head;
    node *tail;
} LinkedList;

// Deletes from the head of the list using a head                                 pointer
void doubly_head_delete(LinkedList *list)
{
    if (list->tail->prev == NULL)
    {
        list->head = list->head->next;
        list->head->prev = NULL;
    }
    else
    {
        list->tail->prev->next = list->tail->next;
        list->tail->next->prev = list->tail->prev;
    }
}

// Deletes the tail of the list using a tail pointer
void doubly_tail_delete(LinkedList *list)
{
    if (list == NULL || list->head == NULL)
        return;
    if (list->head != list->tail)
    {
        list->tail = list->tail->prev;
        list->tail->next = NULL;
        list->tail = list->tail->prev;
    }
    else
    {
        list->head = list->tail = NULL;
    }
}

我不认为尾部删除功能有效,因为我不知道如何正确释放尾部。另外,我不确定如何将尾部指针设置到列表的尾部。至于head_delete(),它似乎正在工作,但我不确定具体如何运行,或者它是否确实正确,或者它只是巧合而已。我仍在尝试学习这一点,互联网似乎没有最好的例子。谢谢

解决方法

在更改指针之前,您需要保留地址。

void doubly_tail_delete(LinkedList *list)
{
   if (list == NULL || list->head == NULL)
      return;
   if (list->head != list->tail)
   {
       node *todelete = list->tail;
       list->tail = list->tail->prev;
       list->tail->next = NULL;
       //the next line you had is wrong.
       //list->tail = list->tail->prev;
       free(todelete);
   }
   else
   {
      free(list->head); //free it here before setting as NULL otherwise you lose the reference.
      list->head = list->tail = NULL;
   }
}

从头部删除时,您也没有释放...而且上面有一些错误。

void doubly_head_delete(LinkedList *list)
{
   if (list == NULL || list->head == NULL)
      return;

   if (list->tail->prev == NULL)
   {
       free(list->head);
       list->head = list->tail = NULL;
   }
   else
   {
       node *todelete = list->head;
       list->head = list->head->next;
       list->head->prev = NULL;
       free(todelete);
   }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...