得分:30
代码修改如下即可(红色部分为修改部分):
#include "stdio.h"
#include "stdlib.h"
//=================================================================
struct num_list
{
int inum;
struct num_list* nnext;
};
int i; //记录节点
//==================================================================
/*创建链表*/
struct num_list* iscreate()
{ i=0;
int datanum_1;
struct num_list* itemp_1,*iend,*ihead;
ihead=(struct num_list*)malloc(sizeof(struct num_list));
if(ihead==NULL)
{
printf("头节点申请空间失败!\n");
return NULL;
}
iend=ihead;
printf("请输入数据:\n");
scanf("%d",&datanum_1);
itemp_1=(struct num_list*)malloc(sizeof(struct num_list));
while(datanum_1!=0)
{
if(itemp_1==NULL)
{
iend=itemp_1;
}
else
{
i++;
itemp_1->inum=datanum_1;
itemp_1->nnext=NULL;
iend->nnext=itemp_1;
iend=itemp_1;
}
itemp_1=(struct num_list*)malloc(sizeof(struct num_list));
printf("请输入数据:\n");
scanf("%d",&datanum_1);
}
iend->nnext=NULL;
return ihead;
}
//========================================================================================
/*修改某节点数据*/
struct num_list* datachange(struct num_list* shead,int numcha,int datanum)
{
struct num_list* itemp;
itemp=shead; //临时指针指向头节点
if(itemp==NULL) //头节点为空时
{
printf("链表为空!\n");
return NULL;
}
if(datanum<0) //如果要修改的数据小于0时
{
printf("输入的数据小于0!\n");
return NULL;
}
i=1;
while(i
{
itemp=itemp->nnext;
i++;
}
if(i==numcha) //循环到要修改节点的前一个节点时。 {
itemp=itemp->nnext; //指向要修改的节点
itemp->inum=datanum; //修改数据
}
return shead;
}
struct num_list* prit(struct num_list* shead)
{
struct num_list* temp;
int numdata=0;
temp=shead;
if(shead==NULL)
{
printf("链表为空!\n");
}
temp=temp->nnext;
while(temp!=NULL)
{
numdata++;
printf("节点编号为:%d\n",numdata);
printf("录入的数据为:%d\n",temp->inum);
temp=temp->nnext;
}
return shead;
}
int main()
{
struct num_list* temp;
temp=iscreate();
int num_1,num_2;
prit(temp);
printf("请输入要修改的节点位置:\n");
scanf("%d",&num_1);
printf("请输入要修改的数据:\n");
scanf("%d",&num_2);
datachange(temp,num_1,num_2);
prit(temp);
return 0;
}
[此贴子已经被作者于2016-1-3 05:23编辑过]