关于链表修改某节点值的问题(调试就是不会改)?
问题:找到某个节点,然后把这个节点的数值改成为其它值调试运行值依然没有改变,还是原来那个数据,并没有变成修改后的数据。
不知道错在哪里,请指导!
程序代码:
#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; } itemp=itemp->nnext; //指向下一节点 while(i<numcha-1) //节点从头节点开始循环到要修改节点的前一个节点 { itemp=itemp->nnext; } if(i==numcha-1) //循环到要修改节点的前一个节点时。 { 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; }