#include
<stdio
.h
>
#include
<stdlib
.h
>
#include
<malloc
.h
>
#define
FLAG -1
typedef struct Node
{
int data
;
struct Node
* next
;
}LNode
,*LinkList
;
void show_List1(LinkList
L);
void CreateLinkList1(LinkList
L);
void CreateLinkList2(LinkList
L);
LNode
*GetLinkList(LinkList
L,int i
);
LNode
*LocationLinkList(LinkList
L,int x
);
void InsertLinkList(LinkList
L,int i
,int x
);
void DeleteLinkList(LinkList
L,int i
);
int
LengthLinkList(LinkList
L);
void reverse(LinkList
L);
void DelLink(LinkList
L,int min
,int max
);
LinkList
MergeList(LinkList La
,LinkList Lb
);
void main()
{
LinkList
L = (LNode
*)malloc(sizeof(LNode
));
CreateLinkList2(L);
show_List1(L);
DelLink(L,4,8);
show_List1(L);
}
void show_List1(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 CreateLinkList1(LinkList
L)
{
LinkList s
;
int x
;
scanf("%d",&x
);
while(x
!= FLAG)
{
s
= (LNode
*)malloc(sizeof(LNode
));
s
->data
= x
;
s
->next
= L->next
;
L->next
= s
;
scanf("%d",&x
);
}
}
void CreateLinkList2(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
*GetLinkList(LinkList
L,int i
)
{
LinkList p
;
int j
= 0;
p
= L;
while(p
!= NULL && j
< i
)
{
p
= p
->next
;
j
++;
}
return p
;
}
LNode
*LocationLinkList(LinkList
L,int x
)
{
LinkList p
;
p
= L->next
;
while(p
!= NULL && p
->data
!= x
)
{
p
= p
->next
;
}
return p
;
}
void InsertLinkList(LinkList
L,int i
,int x
)
{
LinkList p
,s
;
p
= GetLinkList(L,i
-1);
if(p
== NULL)
{
printf("插入失败!");
exit(1);
}
else
{
s
= (LNode
*)malloc(sizeof(LNode
));
s
->data
= x
;
s
->next
= p
->next
;
p
->next
= s
;
}
}
void DeleteLinkList(LinkList
L,int i
)
{
LinkList q
,p
;
p
= GetLinkList(L,i
-1);
if(p
== NULL)
{
printf("删除失败!");
exit(1);
}
else
{
if(p
->next
== NULL)
{
printf("删除失败!");
exit(1);
}
else
{
q
= p
->next
;
p
->next
= p
->next
->next
;
free(q
);
}
}
}
int
LengthLinkList(LinkList
L)
{
int len
= 0;
LinkList p
= L;
while(p
->next
)
{
len
++;
p
= p
->next
;
}
return len
;
}
void reverse(LinkList
L)
{
LinkList p
,q
;
p
= L->next
;
L->next
= NULL;
while(p
)
{
q
= p
;
p
= p
->next
;
q
->next
= L->next
;
L->next
= q
;
}
}
void DelLink(LinkList
L,int min
,int max
)
{
LinkList p
,q
,s
;
p
= L->next
;
while((p
!= NULL) && (p
->data
<= min
))
{
q
= p
;
p
= p
->next
;
}
while((p
!= NULL) && (p
->data
< max
))
{
s
= p
;
p
= p
->next
;
free(s
);
}
q
->next
= p
;
}
LinkList
MergeList(LinkList La
,LinkList Lb
)
{
LinkList p
,q
,r
,Lc
;
p
= La
->next
;
q
= Lb
->next
;
r
= Lc
= Lb
;
while(q
&&p
)
{
if(p
->data
>= q
->data
)
{
r
->next
= q
;
r
= r
->next
;
q
= q
->next
;
}
else
{
r
->next
= p
;
r
= r
->next
;
p
= p
->next
;
}
}
if(q
)
{
r
->next
= q
;
}
else
{
r
->next
= p
;
}
free(La
);
return Lc
;
}
转载请注明原文地址: https://yun.8miu.com/read-109898.html