单链表按元素查找并插入,若不存在需要查找的元素,则在单链表最后插入
代码实现
#include
<stdio
.h
>
#include
<stdlib
.h
>
#include
<malloc
.h
>
#define
FLAG -1
typedef struct Node
{
int data
;
struct Node
* next
;
}LNode
,*LinkList
;
void show_List(LinkList
L);
void CreateLinkList(LinkList
L);
LNode
*LocationLinkList(LinkList
L,int x
);
void InsertLinkList(LinkList
L,int eme
,int x
);
void main()
{
int eme
,x
;
LinkList
L = (LNode
*)malloc(sizeof(LNode
));
printf("创建一个单链表:\n");
CreateLinkList(L);
printf("遍历单链表:\n");
show_List(L);
printf("输入需要在哪一个元素前插入元素,并且输入要插入的元素:\n");
scanf("%d%d",&eme
,&x
);
printf("按值查找,并插入\n");
InsertLinkList(L,eme
,x
);
show_List(L);
}
void show_List(LinkList
L)
{
LinkList p
= L->next
;
printf("%d",p
->data
);
p
= p
->next
;
while(p
!= NULL)
{
printf("->%d",p
->data
);
p
= p
->next
;
}
printf("\n");
}
void CreateLinkList(LinkList
L)
{
LinkList s
,r
;
int x
;
scanf("%d",&x
);
r
= L;
while(x
!= FLAG)
{
s
= (LNode
*)malloc(sizeof(LNode
));
s
->data
= x
;
r
->next
= s
;
r
= s
;
scanf("%d",&x
);
}
r
->next
= NULL;
}
LNode
*LocationLinkList(LinkList
L,int eme
)
{
LinkList p
,q
;
q
= L;
p
= L->next
;
while(p
!= NULL && p
->data
!= eme
)
{
q
= p
;
p
= p
->next
;
}
return q
;
}
void InsertLinkList(LinkList
L,int eme
,int x
)
{
LinkList q
,s
,r
;
int flag
=0;
r
=L;
while(r
)
{
q
= LocationLinkList(r
,eme
);
r
=q
->next
;
if(r
!=NULL)
{
s
= (LNode
*)malloc(sizeof(LNode
));
s
->data
= x
;
s
->next
= q
->next
;
q
->next
= s
;
flag
=1;
}
}
if(flag
== 0)
{
s
= (LNode
*)malloc(sizeof(LNode
));
s
->data
= x
;
q
->next
= s
;
s
->next
= NULL;
}
}
转载请注明原文地址: https://yun.8miu.com/read-109714.html