70,020
社区成员




/////////////////////////删除节点函数
struct students *Delete(struct students *p)
{
struct students *pNewHead = p;
struct students *pSecLink = pNewHead; //读取两次此单链表,并让 pNewLink 链的节点读取比 ph 链晚一个节点。
struct students *ph = p; //原始链表,读取数据。
printf("请输入要删除学生的学号:");
int iNum = 0;
scanf("%d", &iNum);
int iCount = 0; //用来错开两条链表的空间,以方便节点删除后的连接。
int iJudgeLinkPlace = 0; //标记删除的节点是 链头还是其他节点,链头用1标记,链身和链尾都用2表示
while (ph != NULL)
{
if (iNum == p->iNum)
{
iJudgeLinkPlace = 1;
pNewHead = p->pNext;
break;
}
else if (iNum == ph->iNum)
{
iJudgeLinkPlace = 2;
pSecLink->pNext = ph->pNext;
break;
}
else
{
iCount++;
ph = ph->pNext;
if (iCount >= 2)
{
pSecLink = pSecLink->pNext;
}
}
}
switch (iJudgeLinkPlace)
{
case 1:
{
struct students *pNewL = pNewHead;
do{
pNewL->iNum--;
pNewL = pNewL->pNext;
} while (pNewL != NULL);
break;
}
case 2:
{
struct students *pNewLMid = pSecLink->pNext;
if (pNewLMid != NULL)
do{
pNewLMid->iNum--;
pNewLMid = pNewLMid->pNext;
} while (pNewLMid != NULL);
break;
}
}
return(pNewHead);
}
这是节点删除函数,完整的有点长