首页 > 代码库 > 链表中插入一个节点的三种情况

链表中插入一个节点的三种情况

在链表中插入一个元素可以分为三种情况:

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;
}
技术分享
这在中间插入是可以实现的

但是实现在头节点的时候插入的时候出现了问题

技术分享

技术分享

这个问题是没有考虑到插入的是头节点的情况

链表中插入一个节点的三种情况