• 【数据结构】带头结点的单链表的头插法


    首先要说明几个概念:

    1. 头结点,是单链表的头结点,一般不存储数据,它指向单链表的第一个实际元素。但它不仅仅只是一个普通的结点,它包含了整个链表的结构,也就是包含了所有插入的结点
    #include
    #include
    
    typedef struct LNode {
    	int data;
    	struct LNode *next;	
    }LNode *LinkList;
    
    // 头插法建立一个单链表:在单链表的头部插入结点,从而建立一个单链表。
    // 参数是一个LinkList类型的引用L,表示链表的头结点 
    LinkList head_insert(LinkList &L) {
    	LNode *s;
    	int x;
    	L = (LinkList)malloc(sizeof(LNode));		// 创建头结点,用malloc函数给头结点申请一个存储空间
    	L->next=NULL;		// 初始化为空表,由于头结点指向链表的第一个实际元素,所以L->next=NULL,就表示链表为空
    	scanf("%d",&x);		// 用scanf函数输入一个整数x,只要x!=9999,就执行循环体 
    	while(x!=9999) {
    		s=(LNode *)malloc(sizeof(LNode));		// 创建新结点,用malloc函数给新结点分配一个存储空间 
    		s->data=x;		// 将输入的x的值赋值给s->data,即s的数据域 
    		s->next=L->next;	// 头结点L指向链表的第一个元素,将L的指针指向赋值给s,也就是说现在s指向了链表的第一个元素 
    		L->next=s;		// 再将s赋值给L->next,也就是说头结点L指向了s,头结点L只会指向链表的第一个实际元素,所以s现在成为了链表的第一个元素,头插法结束 
    		scanf("%d", &x); 
    		/**
    		* 再用scanf函数输入一个整数x,然后走while的条件判断,
    		* 如果true,就接着执行循环体,依次往单链表的头部插入新结点,
    		* 每次插入的新结点都成为链表的第一个结点,而原来的结点依次向后移动,
    		* 如果false,就返回L 
    		*/	
    	} 
    	return L;		// L虽然只是整个链表的头结点,但它不仅仅是一个普通的结点,它包含了整个链表的结构,也就是包含了所有插入的结点 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    总结日常内容(一)
    Spark SQL 的总体工作流程
    配置Swagger开发环境有效,生产环境无效
    「技术」智能温室可升降吊挂式草莓立体无土栽培技术分析
    分布式存储在数据治理场景中的价值
    自动化项目倍加福测距仪QSM WCS RS485 与西门子S7 200通信
    LintCode 3. 统计数字 Python
    简述无线网的优缺点
    chineseocr测试具体部署步骤(不用web界面)
    线性回归算法——小批量随机梯度下降
  • 原文地址:https://blog.csdn.net/bbt953/article/details/133763060