个人理解,仅供参考
创建链表的步骤:
1:创建头指针
2:将头指针指向空,防止野指针
3:将新的指针移动到头指针(我习惯认为是将头指针赋值给它)
4:建立新结点
5:让新指正指向空,防止野指针
6:给新指针赋值
7:让尾指针指向当前指针,实现链表的连接(我习惯认为是让上一指针指向它)
8:将尾指针移向当前指针(我习惯认为将当前指针赋值给它)
***每次创建新指针的时候都要将指针指向NULL,防止成为野指针
#include<stdio>
typedef struct node
{
int data;
struct node *next;
}node;
node *CreateLink(int len)
{
node *p,*h,*s;
h=(node*)malloc(sizeof(node)); //建立头结点
h->next=NULL; //头结点指针指向空,防止野指针
p=h; //指针向头指针移动
for(int i=0;i<len;i++)
{
s=(node*)malloc(sizeof(node)); //建立新指针
scanf("%d",&s->data); //给新指针赋值
s->next=NULL //新指针指向空,防止野指针
p->next=s; //尾指针指向当前指针,实现链表的连接
p=s; //指针p向后移动
}
return h;
}
int GetLenth(node *h) //*h头指针
{
node *p;
p=h->next; //p指向第一个结点
num=0; //计数器
while(p!=NULL)
{
num++;
p=p->next; //指针向后移动
}
return num;
}
取元素操作(找到第i个元素,并返回其值)
int FindElement(node *h,int i,int len)
{
node *p;
p=h->next; //p指向第一个结点
count=1; //计数器
if(i>len&&i<1) //判断i是否合法
return -1;
while(p!=NULL&&count<i) //找到第i个元素
{
p=p->next; //从头结点开始顺着往后找
count++;
}
return p->data;
}
输出链表
void Display(node *h)
{
node *p;
p=h->next; //p指向第一个节点
while(p!=NULL)
{
printf("%d",p->data) //输出结点数值
p=p->next; //指针向后移动
}
}
未完待续...