码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-12-21 20:45:17      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:c语言   单链表   链表   

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

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

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

技术分享

技术分享

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

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

标签:c语言   单链表   链表   

原文地址:http://blog.csdn.net/u011046042/article/details/42062611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!