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

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

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;
}

这在中间插入是可以实现的

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

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

时间: 2024-12-18 18:05:42

链表中插入一个节点的三种情况的相关文章

[华为机试练习题]49.向升序单向链表中插入一个节点

题目 描述: 输入一个升序单向链表和一个链表节点,向单向链表中按升序插入这个节点. 输入为空指针的情况视为异常,另外不考虑节点值相等的情况. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 详细描述: 接口说明 原型: ListNode* InsertNodeToList(ListNode* pListHead, ListNode* pInsertNode); 输入参数: ListNode* pListHead 单向链表

向升序单向链表中插入一个节点

#include "OJ.h" /* 功能: 输入一个升序单向链表和一个链表节点,向单向链表中按升序插入这个节点. 输入为空指针的情况视为异常,另外不考虑节点值相等的情况. 输入: ListNode* pListHead 单向链表 ListNode* pInsertNode 新插入节点 输出: ListNode* pListHead 单向链表 返回: 正常插入节点返回链表头指针,其它异常返回空指针 */ ListNode* InsertNodeToList(ListNode* pLis

[012]链表笔记--在链表中插入一个节点

插入的数目为num,如果比head小,则插在链表头:如果比链表中元素都大,则插在结尾:否则插在链表中: 代码如下: 1 Link* Link::Add(Link* pLink, int num) { 2 Link *p1,*p2; 3 p1 = pLink; 4 Link *p0 = new Link; 5 p0->id = num; 6 7 while ((p0->id > p1->id) && (p1->next != NULL)) { 8 p2 = p1

页面中插入CSS样式的三种方法

页面中插入css样式的三种方法总结 1. 外部样式 当样式需要应用于很多页面时,外部样式表将是理想的选择.在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观.每个页面使用<link>标签链接到样式表. <link>标签在(文档的)头部: <head> <link rel="stylesheet" type="text/css" href="path/myCss.css"/> <

[算法]向有序的环形单链表中插入新节点

题目: 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序. 要求时间复杂度为O(N),额外空间复杂度为O(1). 分析: 本题不算是很难,但是要注意最后返回头节点时要考虑到不同的情况. 有可能要插入的节点的值比头节点的值还小,此时返回的是要插入的节点,否则返回头节点. 程序: public static Node insertNum(Node h

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

(转)Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

面试时面试关问了有关内存溢出的出现情况和解决方法,网上百度了下,在此感谢 作者liqianbnu总结. 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识.在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).H

SQL:将查询结果插入到另一个表的三种情况

一:如果要插入目标表不存在: select * into 目标表 from 表 where ... 二:如果要插入目标表已经存在: insert into 目的表 select * from 表 where 条件 三:如果是跨数据库操作的话: 怎么把A数据库的atable表所查询的东西,全部插入到B 数据库的btable表中 select * into B.btable from A.atable where ... 同样,如果是跨服务器的,也是可以的. Select * from #Tmp -

链表《3》在链表中插入新的结点

下图是一个创建好的链表 下面我们需要在链表中插入一个结点,例如我们需要在第3个结点后插入一个结点 首先定义一个指针p,并且将p移动到第3个结点处 创建一个新结点pNew并且初始化pNew pNew->data = 20 然后定义一个指针q将q指向p第4个结点 最后将p指向pNew,pNew指向q即可实现在链表中第3个结点后插入一个新结点 即: p->pNext = pNew; pNew->pNext = q; 插入后的效果: 程序代码: #include <stdio.h>