题目描述🍗
只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点
思路分析🍗
结点不重要,,重要的是数据
不删自己,删除后面的结点:
1.把后面结点数据复制到当前
2.删除后一个结点
完整代码🍗
//只给定单链表中某个结点p(并非最后一个结点,即p->next != NULL)指针,删除该结点; (面试重点)
//删除成功返回true,失败返回false
bool DelNode(List plist, Node* pToDel)
{if (pToDel == NULL)return false;Node* p;//不是最后一个节点if (pToDel->next != NULL)//删除pToDel后一个节点{p = pToDel->next;pToDel->data = p->data;//把后一个节点的数据复制到pToDel,这样删除后一个就相当于删除pToDelpToDel->next = p->next;free(p);return true;}//如果pToDel是最后一个节点,那么就必须找到它的前驱for (p = plist; p->next != NULL && p->next != pToDel; p = p->next);if (p->next == NULL)//没有pToDelreturn false;p->next = NULL;free(pToDel);return true;
}int main()
{Node head;InitList(&head);for (int i = 0; i < 10; i++){Insert_tail(&head, i);}Show(&head); Node* p1 = Search(&head, 0);//第0个节点 Node* p2 = Search(&head, 5);//第5个节点 Node* p3 = Search(&head, 9);//第9个节点 DelNode(&head, p1); DelNode(&head, p2); DelNode(&head, p3); Show(&head); return 0;
}
本篇完!🍗