我可以使用C中的以下原型删除最后一个节点吗:
int delete(结构节点* head,int项目)

注意:这里的第一个参数是指向起始节点的指针,而不是指向起始节点的指针的指针。

谢谢

最佳答案

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

试试下面的代码,

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;
}


但是,如果链接列表中只有一个元素,则删除该元素后,您的头指针仍将指向函数中现在已删除的内存位置,从中调用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;
}


如下调用函数delete()

head=delete(head);

关于c - 使用单个指针启动节点删除单个链表的最后一个节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17184511/

10-15 16:46