题目一:只给定单链表中某个节点P(并非最后一个节点,即P->next!=NULL)指针,删除该节点
//方法:1.将P的后继节点的值赋给节点P
// 2.再删除P的后继
bool Delete(LinkList plist, int key)
{
assert(plist != NULL);
Node* p = Search(plist, key);//查找值为key的节点p
if (p == NULL)
{
return false;
}
p->data = p->next->data;
Node* q = p->next;//标记要删除的节点
p->next =q->next;
free(q);
q = NULL;
return true;
}
题目二:只给定单链表中某个结点P(非空结点),在P前面插入一个结点
//方法:1.创建一个新节点
// 2.将新节点的值赋值为节点P的值
// 3.将P的值改为新节点的值
bool Insert(LinkList plist, int key,int val)
{
assert(plist != NULL);
Node* p = Search(plist, key);//查找值为key的节点p
if (p == NULL)
{
return false;
}
Node* q = (Node*)malloc(sizeof(Node));
q->data = p->data;
//将新节点插入链表
q->next = p->next;
p->next = q;
p->data = val;
return true;
}