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


    首先要说明几个概念:

    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
  • 相关阅读:
    GPT-4:思考的曙光还是数据的缩影?
    PrimeTime 工具学习笔记(1)
    qt-C++笔记之两个窗口ui的交互
    git--远程仓库的命令--使用/实例
    用于演示文稿的新 Dapr 幻灯片
    JVM 发生 OOM 的 8 种原因、及解决办法
    外网系统怎么访问协同oa?快解析内网端口映射公网
    Java自定义线程池详解及代码实现(非直接调用ThreadPoolExecutor)
    电子招标初学者指南
    微服务架构下的认证鉴权解决方案
  • 原文地址:https://blog.csdn.net/bbt953/article/details/133763060