使用指向start节点的单个指针删除单个链表的最后一个节点

arp*_*ita 2 c

我可以在C中使用以下原型删除最后一个节点 - int delete(struct node*head,int item)

注意:这里的第一个参数是指向启动节点而不指向指向启动节点的指针.

谢谢

Dee*_*epu 7

是.可以从第一个节点开始删除单链表的最后一个节点.

请尝试以下代码,

int delete(struct node *head)
{
  struct node *temp =head;
  struct node *t;
  while(temp->next != NULL)
  {
    t=temp;
    temp=temp->next;
  }
  free(t->next);
  t->next=NULL; 
}  
Run Code Online (Sandbox Code Playgroud)

但是如果链接列表中只有一个元素,那么在删除该元素后,您的头指针仍将指向您调用的函数中现在已删除的内存位置delete().在这种情况下使用以下版本delete().

struct node *delete(struct node *head)
{
  struct node *temp =head;
  struct node *t;
  if(head->next==NULL)
  {
    free(head);
    head=NULL;
  }
  else
  {
     while(temp->next != NULL)
     {
        t=temp;
        temp=temp->next;
     }
     free(t->next);
     t->next=NULL; 
  }    
  return head;
}
Run Code Online (Sandbox Code Playgroud)

调用该函数delete()如下,

head=delete(head);
Run Code Online (Sandbox Code Playgroud)