一些对于初学者不好理解的代码我会在下面写出来并进行分析
1.struct node
{
int data;//数据域
struct node *next;//指针域
};
链表要创建一个结构体来进行实现,结构体中分两个部分,数据域和指针域,所谓数据域就是用于存储当前结点的数据的,指针域建立了一个与结构体类型一致的指针其主要作用为指向下一个结点的地址
2.head = NULL;//刚开始链表还未形成所以头指针为空
3.p=(struct node*)malloc(sizeof(struct node));使用malloc函数来给指针p动态分配内存空间
4.使用动态分配内存时记得使用free命令去释放掉这段动态申请的内存空间
5.p->data = a;
p->next = NULL;
每个结点进来的时候都是把a放在数据域,至于为啥p的指针要指向的是空指针NULL我想是因为刚建立一个结点所以并没有指向下一个结点,所以要指向空
6.if(head==NULL)
head = p;
判断如果头指针为空则让指针p为头指针
else
q->next = p;
要是头指针不为空就让指针q的指针指向指针p的地址
7.q=p;
每一轮循环p都会去开辟新的结点,所以把即将结束后的p放在q中
8.if(t->next==NULL || t->next->data > a)
插入新的链表元素的条件为要么指针指向的下一个元素的地址为空,要么指针指向的下一个结点的数据域的大小比插入的a大时进行插入
9.p=(struct node *)malloc(sizeof(struct node));
p->data = a;
p->next = t->next;
t->next = p;
以下的一系列操作就是将元素插入链表更改其指针域的一些指向
具体代码如下:
/*
输入样例:6
2 3 4 5 8 9
7
输出样例:
2 3 4 5 7 8 9
*/
#include <iostream>
#include <cstdlib>
using namespace std;
struct node
{
int data;//数据域
struct node *next;//指针域
};
int main()
{
system("color f5");
struct node *p,*q,*head,*t;
int n,a,i;
cin >> n;//输入几个数字
head = NULL;//刚开始链表还未形成所以头指针为空
for(i=0;i<n;i++)
{
cin >> a;//可看作当前链表正在一个节点一个节点的创建
//给输入的结点进行动态内存空间建立
p=(struct node*)malloc(sizeof(struct node));
p->data = a;
p->next = NULL;
if(head==NULL)
head = p;
else
q->next = p;
q=p;
//感觉这地方有错!!!!
}
cin >> a;
t = head;
while(t!=NULL)
{
if(t->next==NULL || t->next->data > a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data = a;
p->next = t->next;
t->next = p;
break;
}
t=t->next;
}
t = head;
while(t!=NULL)
{
cout << t->data;
t=t->next;
}
free(p);
system("pause");
return 0;
}