数据结构 帮忙详细指出错误

来源:百度知道 编辑:UC知道 时间:2024/09/26 01:25:00
void ListInsert_L()
{

ListNode* p1=NULL;
ListNode**p= &ListOfInitList;
int e;
int k=0;
int j=0;
printf("\n请输入你要插入的元素:");
scanf("%d",&e);
printf("\n请输入你要插入顺序表中的位置:");
scanf("%d",&k);
while(j<k-1)
{
(*p)=(*p)->next;
++j;
}
if(j>k+1){printf("出错!");}
(*p)= (ListNode*)malloc(sizeof(ListNode));
(*p)->data = e;// 创建新元素的结点
(*p)->next = p1->next;// 修改指针
p1->next =(*p);
}

你应该说明你出现的问题,不然别人不明不白的看,很少有人会回答这种没有描述的问题,希望楼主以后注意,下面我提些我的意见:
第一:
while(j<k-1)
{
(*p)=(*p)->next;
++j;
}
建议换成for循环,效率更高.
第二:
ListOfInitList的结构没有描述,不清楚你的二级指针是否运用正确.
第三:
if(j>k+1){printf("出错!");}
(*p)= (ListNode*)malloc(sizeof(ListNode));
(*p)->data = e;// 创建新元素的结点
(*p)->next = p1->next;// 修改指针
p1->next =(*p);
这一段应该是出错之后不再向下运行,因为出错了,所以不需要创建新结点,所以下边那段创建新结点的部分应该放在else分支里比较合理
if(j>k+1)
{
printf("出错!");
}
else
{
(*p)= (ListNode*)malloc(sizeof(ListNode));
(*p)->data = e;// 创建新元素的结点
(*p)->next = p1->next;// 修改指针
p1->next =(*p);
}
第四:
p1只在开始赋值为NULL,而下边这句(*p)->next = p1->next;却在移动p1指针,不知道会移到何处.

很明显的一个地方是第四行两个*了,