在链表中插入一个元素可以分为三种情况:
1、在节点的时候
2、在链表中间的任意位置
3、在链表的最后位置,也可以认为这种情况为追加(这个就留到追加的时候来实现)
下面是代码的实现
SN *Insert_S_Node( SN *head ) /* 传入的参数是被插入链表中的头指针 */ { SN *Insert_Node=NULL, *Dest_Node = NULL; /* Insert_Node是将要做成的新链表中的节点 Dest_Node是要插入的节点*/ INT32 OSM = 1, i32i = 0, flag = 0; Dest_Node = ( SN* )malloc( sizeof (SN) ); Insert_Node = head; OSM = OSM_Printf("输入要插入的位置: "); Dest_Node->Sensor_rating = scanf_for(); /* 输入插入的序号 */ i32i = getchar(); /* 消除回车换行的影响 */ if ( 0 > Dest_Node->Sensor_rating) /* 防止输入了小于0的数 */ { OSM = OSM_Printf("请输入大于零的数\n"); } else { OSM = OSM_Printf("输入要插入的元素:"); /* 插入的元素 */ if ( NULL != Dest_Node->Sensor_title ) { gets(Dest_Node->Sensor_title); /* 输入插入的元素 */ } /* 遍历到要插入的位置 */ while (Insert_Node->next != NULL) { Insert_Node = Insert_Node->next; if ( 0 == flag ) { if( Dest_Node->Sensor_rating == Insert_Node->next->Sensor_rating) /* 判断是否相等 */ { Dest_Node->next = Insert_Node->next; /* 开始执行q->next = p->next q->next = p */ Insert_Node->next = Dest_Node; flag = 1; /* 设置标志 */ Insert_Node = Dest_Node->next; } } if ( 1 == flag ) { Insert_Node->Sensor_rating++; } } } return head; }
但是实现在头节点的时候插入的时候出现了问题
这个问题是没有考虑到插入的是头节点的情况
原文地址:http://blog.csdn.net/u011046042/article/details/42062611