创建链表的代码
#include<iostream>
using namespace std;
//使用结构体表示链表的节点类型
struct Node{
int data;
Node*next;
};
int main(){
Node*head,*p,*q;
head=NULL;//头指针初始为空
int n;//表示需要输入数据的个数
cin>>n;
for(int i=0;i<n;i++){
int t;
cin>>t;
p=new Node;//创建一个新节点
p->data=t;//给新节点赋予数值
p->next=NULL;//给新节点设置后继指针指向空
if(head==NULL){
head=p;//如果这是第一个创建的节点,则头指针指向这个节点
}else{
q->next=p;//如果不是第一个创建的节点,则将上一个节点的后继指针指向当前节点
}
q=p;//指针q也指向当前节点
}
//输出链表中所有数
Node*t;
t=head;
while(t!=NULL){
cout<<t->data<<" ";
t=t->next;//继续下一个节点
}
return 0;
}
创建链表且有插入功能的代码
默认我们创建的链表是单调递增的,创建好链表后,我们再输入一个待插入的数值,实现新数值插入后链表还是单调递增的
#include<iostream>
using namespace std;
//使用结构体表示链表的节点类型
struct Node{
int data;
Node*next;
};
int main(){
Node*head,*p,*q,*t;
head=NULL;//头指针初始为空
int n;//表示需要输入数据的个数
cin>>n;
for(int i=0;i<n;i++){
int t;
cin>>t;
p=new Node;//创建一个新节点
p->data=t;//给新节点赋予数值
p->next=NULL;//给新节点设置后继指针指向空
if(head==NULL){
head=p;//如果这是第一个创建的节点,则头指针指向这个节点
}else{
q->next=p;//如果不是第一个创建的节点,则将上一个节点的后继指针指向当前节点
}
q=p;//指针q也指向当前节点
}
//插入数据的代码从这开始,上面是一样的
int insert;
cin>>insert;
t=head;
while(t!=NULL){
if(t->next->data>insert){//如果当前节点的下一个节点的值大于待插入数,则将待插入值插入到当前节点的后面
p=new Node;//创建一个新节点
p->data=insert;//给新节点赋予数值
p->next=t->next;//新增结点的后继指针指向当前结点的后继指针所指向的结点
t->next=p;//当前结点的后继指针指向新增结点
break;;//插入完毕退出循环
}
t=t->next;//继续下一个节点
}
//输出链表中所有数
t=head;
while(t!=NULL){
cout<<t->data<<" ";
t=t->next;//继续下一个节点
}
return 0;
}
一开始创建了大小为5的链表1,6,7,10,11。此时我们插入新数据8,可以看到插入8之后,链表还是保持单调递增的状态