天空的一角 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日

悬赏问题

  • ¥15 remotes安装提示没有description文件
  • ¥15 AttributeError: 'NoneType' object has no attribute 'drop_duplicates'报错
  • ¥15 以下代码,运行结果报错
  • ¥15 Vivado仿真数据出错
  • ¥15 银河麒麟不支持vant等前端框架怎么办?
  • ¥15 vue3的子组件在父页面调用不显示不生效问题
  • ¥15 cadence PEX
  • ¥15 phython创建了文件 显示在项目下面,但运行不了,运行时还是运行main文件,并且说main文件不允许并行运行
  • ¥15 FutureWarning:不推荐使用空或全 NA 条目的 DataFrame 串联行为。怎么改呢?
  • ¥15 Chatgpt突然无法正常显示数学公式,如何解决?