❤️坚持是一种品质❤️
作者:每天都要记得刷题(●’◡’●)
时间:2022/03/31
本篇绪论:本篇博客将介绍带头单向不循环链表的插入
本篇感悟:本篇涉及很多单链表的 *** 作,算是实 *** 一遍插入 *** 作吧。
- 题目介绍
- 拆解思路
- 具体代码
- 模块化代码
本题用数组也可以做,但是我认为用单链表可以实战一下,巩固巩固单链表的基本 *** 作。
具体代码//定义结构体结点(顺便起typedef别名)
// while()判断程序结束条件
// while()由n(个数)创建单链表
//遍历单链表寻找位置
//经典插入 *** 作
//循环次数未知
备注:详解在代码块中
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
//定义结构体结点(顺便起typedef别名)
typedef struct node {
int date;
struct node* next;
}Node;
int main()
{
int m, n;
//定义一个结构结点
Node* head, * end, * p, * q, * r;//q用来创建结点,其数据域存放着要插入的数据m
scanf("%d%d", &m, &n);//n个数(结点),m是要插入的整型数据(date)
// while()判断程序结束条件
while (m != 0 || n != 0)//m和n同时为0表示程序结束,||相当于并联电路,只有两个都断开才能终结
{
//创建头结点
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
//创建单链表
end = head;
for (int i = 1; i <= n; i++)
{
p = (Node*)malloc(sizeof(Node));
scanf("%d", &p->date);
//感悟:单向链表的很多 *** 作都是要两个指针一起,野辅联动。
end->next = p;
end = p;
}
end->next = NULL;
//比数据域内容大小找插入位置
//要一个指针才能找到那个位置,但是要俩个指针才能完成插入 *** 作
p = head->next;
//循环次数未知用while
while (p->date < m)
{
r = p;
p = p->next;
}
//创建带插入的结点
q = (Node*)malloc(sizeof(Node));
q->date = m;
//经典插入 *** 作
q->next = r->next;
r->next = q;
p = head->next;
//打印
for (int i = 1; i <= n; i++)
{
printf("%d", p->date);
p = p->next;
}
printf("%d", p->date);//这个容易漏掉
scanf("%d%d", &m, &n);
}
return 0;
}
模块化代码
1.创建单链表
2.定位到要插入的位置
❤️关注我一起成长❤️
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)