单链表

一、结构体定义

typedef struct LNode //LNode不可省
{
	int data; //数据域
	struct LNode *next;
}LNode;

二、操作

1.尾插法建立单链表

void creatListT(LNode *&L,int a[],int n)
{
	LNode *s,*r; //s用来指向新生成的结点,r始终指向L的终端结点
	L=(LNode*)malloc(sizeof(LNode)); //申请头结点空间
	L->next=NULL;
	r=L; //此时头结点就是终端结点
	
	for(int i=0;i<n;++i)
	{
		s=(LNode*)malloc(sizeof(LNode)); //为新结点申请空间
		s->data=a[i];
		
		r->next=s; // r连接新结点
		r=r->next; // r指向s(新的终端结点)
	}
	r->next=NULL; //链表建立完成,终端结点的next指针指向NULL
}

2.头插法建立单链表

void creatListH(LNode *&L,int a[],int n)
{
	LNode *s; //s用来指向新生成的结点
	L=(LNode*)malloc(sizeof(LNode)); //申请头结点空间
	L->next=NULL;
	
	for(int i=0;i<n;++i)
	{
		s=(LNode*)malloc(sizeof(LNode)); //为新结点申请空间
		s->data=a[i];
		
		s->next=L->next; //新结点next指针指向L中开始结点(L的下一个结点);
		L->next=s; //s成为新的开始结点
	}
}

3.插入结点

//s:待插入结点
//p:待插入结点的前一个结点
s->next=p->next;
p->next=s;

4.删除结点

p->next=p->next->next;

5.查找结点

///查找值为x的结点并删除
int findAndDelete(LNode *L,int x)
{
	LNode *p,*q;
	p=L;
	while(p->next!=NULL)
	{
		if(p->next->data==x)
			break;
		p=p->next;
	}
	
	if(p->next==NULL)
		return 0;
	else
	{
		q=p->next;
		p->next=p->next->next; //删除结点q
		free(q);
		
		return 1;
	}
}
posted @ 2022-08-22 21:18  unravel_CAT  阅读(4)  评论(0)    收藏  举报