其他分享
首页 > 其他分享> > 还不会吗?单向链表的四个基本操作,赶紧来看看吧。

还不会吗?单向链表的四个基本操作,赶紧来看看吧。

作者:互联网

#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