天空的一角 2022-03-31 19:34 采纳率: 80%
浏览 44
已结题

C语言链表删除问题求解


#include <stdio.h>
#include <stdlib.h>
struct People
{
    char Name[40];
    int Number;
    struct People *pNext;
};
int iCount;
struct People *Create()
{
    struct People *pHead=NULL;
    struct People *pEnd,*pNew;
    iCount=0;
    printf("Please Enter Name and Number:\n");
    pEnd=pNew=(struct People*)malloc(sizeof(struct People));
    scanf("%s",&pNew->Name);
    scanf("%d",&pNew->Number);
    while(pNew->Number!=0)
    {
        iCount++;
        if(iCount==1)
        {
            pNew->pNext=pHead;
            pEnd=pNew;
            pHead=pNew;
        }
        else
        {
            pNew->pNext=NULL;
            pEnd->pNext=pNew;
            pEnd=pNew;
        }
        pNew=(struct People*)malloc(sizeof(struct People));
        scanf("%s",&pNew->Name);
        scanf("%d",&pNew->Number);
    }
    free(pNew);
    return pHead;
}

void Print(struct People *pHead)
{
    struct People *pTemp;
    int iIndex;
    printf("----------The Information Has %d----------\n",iCount);
    pTemp=pHead;
    iIndex=0;
    while(pTemp!=NULL)
    {
        iIndex++;
        printf("The NO%d is: \n",iIndex);
        printf("The Name is:%s\n",pTemp->Name);
        printf("The Number is %d\n",pTemp->Number);
        pTemp=pTemp->pNext;
        
    }
}

struct People *Insert(struct People *pHead)
{
    struct People *pNew;
    printf("Insert mumber at first\n");
    pNew=(struct People*)malloc(sizeof(struct People));
    scanf("%s",&pNew->Name);
    scanf("%d",&pNew->Number);
    pNew->pNext=pHead;//新节点指向头节点 
    pHead=pNew;//头指针指向新节点 
    iCount++;
    return pHead;
}

//下面是删除代码 
void Delete(struct People *pHead,int iTndex)//pHead 表示头结点,iTndex 表示要删除的节点 
{
    int i;//控制循环变量 
    struct People* pTemp;//临时指针 
    struct People* pPre;//表示要删除节点前的节点 
    pTemp=pHead;//得到头节点 
    pPre=pTemp;
    printf("---delete NO%d mumber---",iIndex);
    for(i=1;i<iIndex;i++)//循环,让pTemp指向要删除的节点 
    {
        pPre=pTemp;
        pTemp=pTemp->pNext;
    }
    pPre->pNext=pTemp->pNext;//连接删除后两边的节点 
    free(pTemp);
    iCount--;
     
}
//NEW

int main()
{
    struct People *pHead;
    pHead=Create();
    pHead=Insert(pHead);
    Delete(pHead,2);
    Print(pHead);
    return 0;
}

把删除代码去掉后,运行正常,
但是加上以后就不正常了。

img

//iIndex  应该是与上下两个操作不违背的吧,所以不晓得问题出在哪。

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-03-31 20:43
    关注

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 3月31日

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器