题目:从无头单向链表中删除已知结点(不是头结点也不是最后一个结点)
分析:由于是无头单向链表,故无法根据现有的结点找到他的前一个结点,只能找到他 的下一个结点。采用替换的方式,将该结点的下一个结点的内容赋给他,然后删除他的下一个结点,则可以达到目的。
//***********************************************
//题目:在一个没有头结点的单向链表中,删除一个
//已知结点(不是头结点,也不是最后一个结点)
//***********************************************
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;
}