#include <stdio.h>
#include <stdlib.h>
#define false 0
#define true 1
typedef struct
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList List_HeadInsertv2(LinkList L)
{
int x;
L=(LNode *)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=999)
{
LNode *q=(LNode *)malloc(sizeof(LNode));
q->next=L->next;
q->data=x;
L->next=q;
scanf("%d",&x);
}
return L;
}
LinkList List_HeadInsert(LinkList L)
{
int x;
if(L==NULL)
{
scanf("%d",&x);
if(x!=999)
{
L=(LinkList)malloc(sizeof(LNode));
L->data=x;
L->next=NULL;
}
else return L;
}
scanf("%d",&x);
while(x!=999)
{
LNode *q=(LNode *)malloc(sizeof(LNode));
q->next=L;
q->data=x;
L=q;
scanf("%d",&x);
}
return L;
}
LinkList List_TailInsert(LinkList L)
{
int x;
LNode * p;
if(L==NULL)
{
scanf("%d",&x);
if(x!=999)
{
L=(LinkList)malloc(sizeof(LNode));
L->data=x;
L->next=NULL;
p=L;
}
else return L;
}
scanf("%d",&x);
while(x!=999)
{
LNode * q=(LNode *)malloc(sizeof(LNode));
q->data=x;
q->next=NULL;
p->next=q;
p=q;
scanf("%d",&x);
}
return L;
}
LinkPrint(LinkList L)
{
LNode * p=L->next;
if(p==NULL)
{
printf("\n");
}
while(p!=NULL)
{
printf("%d;;",p->data);
p=p->next;
}
}
_Bool DeleteAllX(LinkList * L,int x)
{
LNode *p=*L;
if(*L==NULL)
{
return ;
}
if((*L)->data==x)
{
p=*L;
*L=(*L)->next;
free(p);
DeleteAllX(L ,x);
}
else if((*L)->data!=x)
{
DeleteAllX(&((*L)->next) ,x);
}
}
_Bool DeleteAllXv2(LinkList *L,int x)
{
LNode *p=*L;
if(*L==NULL)
{
return ;
}
if((*L)->data==x)
{
p=*L;
*L=(*L)->next;
free(p);
DeleteAllX(L ,x);
}
else if((*L)->data!=x)
{
DeleteAllX(&((*L)->next) ,x);
}
}
int main()
{
LinkList L;
L=NULL;
L=List_HeadInsertv2(L);
LinkPrint(L);
printf("\n");
//DeleteAllX(&L,3);
DeleteAllXv2(&(L->next),3);
LinkPrint(L);
return 0;
}
链表第一二题
最新推荐文章于 2024-06-12 22:30:00 发布
本文介绍了使用C语言实现的链表操作,包括List_HeadInsertv2()函数进行头插入,List_TailInsert()实现尾部插入,以及DeleteAllX()和DeleteAllXv2()函数用于删除所有特定值的节点。通过示例展示了如何创建链表并进行基本操作。
摘要由CSDN通过智能技术生成