关键词:
北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。信息学奥林匹克;东坝;北京中学。面向6-18岁中小学生,做最专业的中小学编程教育。信息学研讨会;家长;学生;关心问题;少儿编程问题解答。
#include <iostream>
using namespace std;
//在有序的链表中插入数据。
/*
按照顺序插入,在最前,最后,和中间。
*/
struct Node
{
int num;
Node *next;
};
//创建链表
Node *Create()
{
Node *head,*p1,*p2;
head = p2 = p1 = new Node();
cin>>p1->num;
if(p1->num == 0)//如果第一个结点为0 ,等于链表不创建
{
delete head;
return NULL;
}
while(true)//死循环
{
p1 = new Node();
cin>>p1->num;
if(p1->num == 0)//为0时结束
{
delete p1;
break;
}
p2->next = p1;//p2专业连接起来
p2 = p1;
}
p2->next = NULL;//最后结点的next域为空
return head;
}
void Disp(Node *head)
{
Node *temp = head;
while(temp!=NULL)//一直循环到最后打印
{
cout<<temp->num<<"\t";
temp = temp->next;
}
cout<<endl;
}
//注意输入的内容是有顺序的,然后插入的数据按照顺序插入
/*
三种插入形式:第一插入的数据最小,放在头
第二插入的数据最大,放在结尾。
第三插入的数据不是最小和最大,放在中间。
*/
Node * Insert(Node *head)
{
cout<<"请输入要插入的数"<<endl;
int id;
cin>>id;
//第一种形式:最小
//新插入的是一个结点,所以创建新的结点
Node *inNode = new Node;
inNode->num = id;
//第二种形式:最大
//如果插入的数据小于第一个,则把插入的数据放在第一个结点。插入的数据就是头结点。
if(head->num >= id)
{
inNode->next = head;
return inNode;
}
//temp2保存头
Node *temp2 = head;
//循环到结尾
while(temp2->next!=NULL)
{
temp2 = temp2->next;
}
//如果是最大
if(temp2->num<=id)
{
temp2->next = inNode;//新结点为最后一个,链接到当前结点的后面。
inNode->next = NULL;//新结点的next域为空
return head;
}
//第三种形式:为中间的数字
//保存头
Node *temp3 = head;
//循环遍历每一个的值
while(temp3->next->next!=NULL)
{
//找到插入的位置,进行比较,看那个比插入的数据小。
if(temp3->next->num>=id)
{
inNode->next = temp3->next;//链接后面
temp3->next = inNode;//链接前面
break;
}
temp3 = temp3->next;//开始下一个,没有它,是死循环。
}
return head;
}
int main()
{
Node *head = Create();//创建链表
Disp(head); //打印链表
head = Insert(head);//插入结点
Disp(head); //插入后打印
return 0;
}
A、官方网址:
B、微信公众号:
添加微信,获取资料。
关注公众号,获取动态。