#include<bits/stdc++.h>//万能文件头
using namespace std;
//创建一个结构体表示链表的结点类型
struct node
{
int data; //存放链表中的数据
struct node *next; //存放该数据的后向指针
}; //别忘了;哦
int main() {
struct node *head,*p,*q,*t; //定义一系列结构体的后向指针
int i,n,a,number;
cin>>n;
head=NULL; //头指针初始为空
for(i=1;i<+n;i++) //循环输入n个数
{
cin>>number;
//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p=(struct node *)malloc(sizeof(struct node)); //内存中动态分配结构体指定大小的存储空间,molloc函数用于动态分配内存
p->data=number; //将数据存入当前结点的data域中
p->next=NULL; //设置当前结点的后向指针为空,也表明当前结点的下一个结点为空
if(head==NULL)
head=p; //如果这是第一个创建的结点,则将头指针指向这个结点
else
q->next=p; //若不是第一个结点,则将上一个结点的后继指针指向当前结点
q=p; //指针q也指向当前结点,q代表当前的最后一个结点的指针 }
cin.sync();
cin>>a; //读入待插入的数
t=head; //从表的头部开始遍历
while(t!=NULL) //当没有达到表尾部的时候循环
{
if(t->next->data > a) //如果当前结点的下一个结点的值大于待插入的数 ,则将数插入
{
p=(struct node *)malloc(sizeof(struct node)); //动态申请一个空间,用来存放新增的结点
p->data=a;
p->next=t->next; //新增结点的后继指针指向当前结点的后继zhizhen
t->next=p; //当前结点的后继指针指向新增结点的后继指针
break; //插入完毕,退出循环
}
t=t->next; //继续下一个结点
}
//输出链表中的所有数
t=head;
while(t!=NULL)
{
cout<<t->data<<" ";
t=t->next; //继续下一个结点
}
return 0;
}
编译结果如下:
链表肯定是能增加长度的啊,不然还有啥用
循环插入节点整个节奏都有问题,修改如下:
#include<bits/stdc++.h>//万能文件头
using namespace std;
//创建一个结构体表示链表的结点类型
struct node
{
int data; //存放链表中的数据
struct node *next; //存放该数据的后向指针
}; //别忘了;哦
int main()
{
struct node *head,*p,*q,*t; //定义一系列结构体的后向指针
int i,n,a,number;
cin>>n;
head=NULL; //头指针初始为空
for(i=0;i<n;i++) //循环输入n个数
{
cin>>number;
//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p=(struct node *)malloc(sizeof(struct node)); //内存中动态分配结构体指定大小的存储空间,molloc函数用于动态分配内存
p->data=number; //将数据存入当前结点的data域中
p->next=NULL; //设置当前结点的后向指针为空,也表明当前结点的下一个结点为空
if(head==NULL)
head=p; //如果这是第一个创建的结点,则将头指针指向这个结点
else
q->next=p; //若不是第一个结点,则将上一个结点的后继指针指向当前结点
q=p; //指针q也指向当前结点,q代表当前的最后一个结点的指针
}
cin>>a; //读入待插入的数
if(head->data > a)
{
p=(struct node *)malloc(sizeof(struct node)); //动态申请一个空间,用来存放新增的结点
p->data=a;
p->next = head;
head = p;
}
else
{
t=head; //从表的头部开始遍历
while(t->next!=NULL) //当没有达到表尾部的时候循环
{
if(t->next->data > a) //如果当前结点的下一个结点的值大于待插入的数 ,则将数插入
{
p=(struct node *)malloc(sizeof(struct node)); //动态申请一个空间,用来存放新增的结点
p->data=a;
p->next=t->next; //新增结点的后继指针指向当前结点的后继zhizhen
t->next=p; //当前结点的后继指针指向新增结点的后继指针
break; //插入完毕,退出循环
}
t=t->next; //继续下一个结点
}
if(t->next == NULL)
{
p=(struct node *)malloc(sizeof(struct node)); //动态申请一个空间,用来存放新增的结点
p->data=a;
p->next = NULL;
t->next = p;
}
}
//输出链表中的所有数
t=head;
while(t!=NULL)
{
cout<<t->data<<" ";
t=t->next; //继续下一个结点
}
return 0;
}
你t->next都没有判断是否为空你就使用t->next->data去比较,固然有可能会出错。