L= (LinkList)malloc(sizeof(LNode)); //创建头结点 L->next=NULL; //初始为空链表 while(x!=n){ s=(LNode\*) malloc(sizeof(LNode)); //创建新结点 s->data=x; s->next=L->next; //核心代码 L->next=s; //核心代码 x++; } return L;
}
❗❗ 重点二:以不带头结点方式实现头插法
- 动图解析
- 图解
- 代码
LinkList Headinster(LinkList &L,int n){ LNode \*s; int x=1; L= (LinkList)malloc(sizeof(LNode)); L->data=x++; L->next=NULL; while(x!=n){ s=(LNode\*) malloc(sizeof(LNode)); s->data=x; s->next=L; L=s; x++; } return L; }
二、尾插法
- 什么是尾插法❓
在插入时,新的结点插入到当前链表的表尾,为此必须增加一个尾指针r
,使其始终指向当前链表的尾结点。 - 怎么实现头插法❓
💤思考二:尾插法的核心是什么❓
以有头结点为例:
由图可知,r->next=s; //①r的指针域指向S(让新结点插入到链表) r=s; //②r指针指向s(保持r指针一直在链表尾端,方便插入新的结点)
那上面两句可以交换吗❓我们来试一试
还是不能交换呦
❗❗ 重点三:以带头结点方式实现尾插法
- 动图解析
- 图解
- 代码
LinkList TailInster(LinkList &L,int n){ int x=1; L= (LinkList)malloc(sizeof(LNode)); LNode \*s,\*r=L; while(x!=n){ s=(LNode\*) malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; x++; } r->next=NULL; return L; }
❗❗ 重点四:以不带头结点方式实现尾插法
- 动图解析
(略,参考上)- 图解
- 代码
LinkList Tailinster(LinkList &L,int n){ int x=1; L= (LinkList)malloc(sizeof(LNode)); L->data=x++; LNode \*s,\*r=L; while(x!=n){ s=(LNode\*) malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; x++; } r->next=NULL; return L; }
三、完整代码
#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;
typedef struct LNode{
ElemType data; //数据域
struct LNode \*next; //指针域
}LNode,\*LinkList;
/\*
\* 头插法 有头结点
\*/
LinkList HeadInster(LinkList &L,int n){
LNode \*s;
int x=1;
L= (LinkList)malloc(sizeof(LNode)); //创建头结点
L->next=NULL; //初始为空链表
while(x!=n){
s=(LNode\*) malloc(sizeof(LNode)); //创建新结点
s->data=x;
s->next=L->next;
L->next=s;
x++;
}
return L;
}
/\*
\* 头插法 无头结点
\*/
LinkList Headinster(LinkList &L,int n){
LNode \*s;
int x=1;
L= (LinkList)malloc(sizeof(LNode));
L->data=x++;
L->next=NULL;
while(x!=n){
s=(LNode\*) malloc(sizeof(LNode));
s->data=x;
s->next=L;
L=s;
x++;
}
return L;
}
/\*
\* 尾插法、有结点
\*/
LinkList TailInster(LinkList &L,int n){
int x=1;
L= (LinkList)malloc(sizeof(LNode));
LNode \*s,\*r=L;
while(x!=n){
s=(LNode\*) malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
x++;
}
r->next=NULL;
return L;
}
/\*
\* 尾插法、无结点
\*/
LinkList Tailinster(LinkList &L,int n){
int x=1;
L= (LinkList)malloc(sizeof(LNode));
L->data=x++;
LNode \*s,\*r=L;
while(x!=n){
s=(LNode\*) malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
x++;
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)