还不会吗?单向链表的四个基本操作,赶紧来看看吧。
作者:互联网
#include<stdio.h>
#include<stdlib.h>
struct node{
int no;
struct node *lian;
};
int jianli(node*head,int num);
int shuchu(node*head);
int charu(node*head,int n);
int shanchu(node*head,int n);
int main()
{
struct node*head;
head=(node*)malloc(sizeof(node));
jianli(head,30);//建立新的链表节点
shuchu(head);//把链表输出出来
printf("\n");
charu(head,2);//在第二个节点后面插入一个节点
shuchu(head);//输出插入后的链表
printf("\n");
shanchu(head,5);
shuchu(head);
}
int jianli(node*head,int num)//在建立链表节点的过程中,初始p不用让他=head,在for里面p自动的链接到下一个位置中
{
node*p;
head->lian=NULL;
for(int i=num;i>0;i--)//由于链表在建立过程中是从后往前建立,所以第一个节点要赋值为30,之后依次递减,输出的时候就不会是倒序了
{
p=(node*)malloc(sizeof(node));
p->no=i;
p->lian=head->lian;//只是为了输出函数中,方便判断条件
head->lian=p;这个就是链表链接的关键步骤
}
}
int shuchu(node*head)
{
node*p;
p=head;
while(p->lian!=NULL)
{
p=p->lian;链表向下访问的核心
printf("%-3d",p->no);
}
}
int charu(node*head,int n)//插入只需要两个指针,分别指向第几个元素和插入的节点
{
node*p,*q;
p=head;
for(int i=0;i<n;i++)
{
p=p->lian;
}
q=(node*)malloc(sizeof(node));
q->no=50;
q->lian=p->lian;
p->lian=q;
}
int shanchu(node*head,int n)//删除和插入一样,也是需要两个指针,其中一个指向被删除节点的前一个,另一个指向删除节点
{
node*p,*q;
p=head;
for(int i=0;i<n-1;i++)
{
p=p->lian;
}
q=p->lian;
p->lian=q->lian;
free(q);
}
下面是charu和shanchu函数的形象标识,希望能理解。
标签:node,head,int,单向,链表,lian,基本操作,节点 来源: https://blog.csdn.net/somemoods/article/details/111869670