问答题 如何删除结点的前驱结点
【正确答案】
【答案解析】假设在长度大于1的单循环链表中,既无头结点,也无头指针,s为指向链表中某个结点的指针,如何删除结点*s的直接前驱结点?
已知指向这个结点的指针是*s,那么要删除这个结点的直接前趋结点,首先需要找到一个结点,它的指针域是指向*s的,然后再把这个结点删除。具体过程如下:
void DeleteNode(ListNode *s)
{
ListNode *P,*q;
p=s;
while(p->next->next!=s)
{
q=p;
p=p->next;
}
q->next=s;
free(p);
}