面试题:从无头链表中删除已知结点

来源:互联网 发布:Windows 系统 编辑:程序博客网 时间:2024/05/16 06:46

题目:从无头单向链表中删除已知结点(不是头结点也不是最后一个结点)

分析:由于是无头单向链表,故无法根据现有的结点找到他的前一个结点,只能找到他 的下一个结点。采用替换的方式,将该结点的下一个结点的内容赋给他,然后删除他的下一个结点,则可以达到目的。

//***********************************************//题目:在一个没有头结点的单向链表中,删除一个//已知结点(不是头结点,也不是最后一个结点)//***********************************************typedef struct Lnode{  int data;  struct Lnode *next;}Lnode;//A->B->C->D......//要删除B,先将C的内容赋给B,再删除C,则达成目的//注意在free(C)后,要将其置为空(NULL),防止野指针int deletenode(Lnode *pcur){  if(NULL ==  pcur)    return -1;  if(NULL != pcur->next)  {    pcur->next = pcur->next->next;    pcur->data = pcur->next->data;    free(pcur->next);    pcur->next = NULL;  }  return 0;}