saber the saber 2022-11-03 21:30 采纳率: 77.8%
浏览 16
已结题

插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct note
{
int data;
struct note *pnext;
}NODE,*PNODE;

PNODE create_list(void);
void traverse_list(PNODE phead);
bool insert_line(PNODE phead,int pos,int val);

int main()
{
PNODE phead=NULL;
phead=create_list();
traverse_list(phead);
insert_line(phead,3,5);
traverse_list(phead);

return 0;

}
PNODE create_list(void)
{
int len;
int val;
printf("请输入想要创建的节点数:");
scanf("%d",&len);
PNODE phead=(PNODE)malloc(sizeof(PNODE));
PNODE ptail=phead;
ptail->pnext=NULL;
if(phead==NULL)
exit(-1);
int i;
for(i=0;i<len;i++){
printf("请输入第%d节点储存的值:",i+1);
scanf("%d",&val);
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
ptail->pnext=pnew;
pnew->pnext=NULL;
ptail=pnew;
}
return phead;
}

void traverse_list(PNODE phead)
{
PNODE p=phead;
while(p!=NULL&&p->pnext!=NULL){
p=p->pnext;
printf("%d ",p->data);
}
return;

}
bool insert_line(PNODE phead,int pos,int val)
{
int i=0;
PNODE p=phead->pnext;
while(p!=NULL&&i<pos-1){
p=p->pnext;
i++;
}
if(p==NULL||i>pos-1){插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?
return false;
}
PNODE pnew=(PNODE)malloc(sizeof(NODE));
if(pnew==NULL){
printf("动态分配内存失败");
exit(-1);
}
pnew->data=val;
PNODE q=p->pnext;
p->pnext=pnew;
pnew->pnext=q;

return true;

}

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-11-03 21:44
    关注

    while(p!=NULL&&i<pos-1){
    p=p->pnext;
    i++;
    }
    if(p==NULL||i>pos-1){插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?
    return false;
    }
    这个while和if要关联着看。如果插入位置是有效的,while结束时,肯定p不为空,并且i=pos-1。所以,如果最终p=NULL,表示pos位置超过了链表的长度,是错误的。i>pos-1的条件确实可以不加。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 创建了问题 11月3日

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程