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


    首先要说明几个概念:

    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
  • 相关阅读:
    Map集合的常用功能、遍历方式、集合特点与TreeMap的特点和排序全文详解
    了解Qt QScreen的geometry ,size
    深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
    TCP的粘包问题及解决办法
    【uni-app从入门到实战】环境搭建和配置学习
    string类详解
    立足小餐饮,“新名酒”江小白能走多远?
    【电视剧-长相思】经典语录
    旅游线路网站-Bootstrap
    汇编-MOVSXD64位带符号扩展传送
  • 原文地址:https://blog.csdn.net/bbt953/article/details/133763060