- 数据结构每日一题day12(链表)★★★★★
题目描述:采用头插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。
算法思想:
1.初始化头结点:创建头结点,并使其指针域初始化为NULL。
2.循环插入元素:
不断接收用户输入的整数值,若输入为-1则停止。
为新元素动态分配结点空间,将数据存入结点。
使用头插法将新结点插入头结点之后。
返回链表:最终返回头指针L。
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(n)
代码实现:
cpp
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;
LinkList CreateList_HeadInsert() {
LinkList L = (LinkList)malloc(sizeof(LNode)); // 创建头结点
L->next = NULL; // 初始为空链表
LNode *s; // 用于创建新结点
int x; // 用户输入的值
printf("请输入元素(输入-1结束):");
scanf("%d", &x);
while (x != -1) {
s = (LNode*)malloc(sizeof(LNode)); // 创建新结点
s->data = x; // 存入数据
s->next = L->next; // 新结点指向原首结点
L->next = s; // 头结点指向新结点
scanf("%d", &x); // 继续输入
}
return L; // 返回头指针
}