为什么要在定义一个pre。pre=p和后两句都是什么意思

void ListDelete(SP *L)
{
char n[40];
SP *p = L->next, *pre = L; //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
if (p == NULL)
printf("数据为空,无法删除!");
else
{
printf("请输入您要删除的商品名称:");
scanf("%s", n);
while (strcmp(p->name, n) != 0)
{
pre = p;
p = pre->next;
if (p == NULL)
{
printf("没有找到相关信息,无法删除\n");
return;
}
}
pre->next = p->next;
free(p);
printf("删除成功");
}
}

pre是单词previous(以前的)的意思,删除一个节点,要保证删除节点的前面那个节点的next节点等于删除节点的后一个节点,pre = p;是保证pre是删除节点的前一个节点,pre->next = p->next;是删除后,让前一个节点指向删除节点的后一个节点。学习链表一般画画图就很好理解
如有帮助,请采纳,谢谢