#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList L,int n)
{
int i;
LinkList p;
if(L==NULL)
exit(0);
L->data=n;
L->next=NULL;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(p->data));
p->next=L->next;
L->next=p;
}
}
void print(LinkList L)
{
LinkList p;
p=L->next;
while(p!=NULL)
{
printf("%d/t",p->data);
p=p->next;
}
printf("/n");
}
void InsertFront(LinkList L,int value)
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
p->data=value;
p->next=L->next;
L->next=p;
}
void InsertBack(LinkList L,int value)
{
LinkList p,q;
p=(LinkList)malloc(sizeof(LNode));
p->data=value;
q=L;
while(q->next!=NULL)
{
q=q->next;
}
p->next=q->next;
q->next=p;
}
void InsertAt(LinkList L,int pos,int value)
{
LinkList p,q;
int i;
p=(LinkList)malloc(sizeof(LNode));
p->data=value;
q=L;i=1;
while(q->next!=NULL&&i<pos)
{
q=q->next;
i++;
}
if(q!=NULL&&i==pos)
{
p->next=q->next;
q->next=p;
}
}
void DeleteFront(LinkList L,int *value)
{
LinkList p;
if(L->next==NULL)
exit(0);
p=L->next;
*value=p->data;
L->next=p->next;
}
void DeleteBack(LinkList L,int *value)
{
LinkList p,q;
p=L->next;
q=L;
while(p->next!=NULL)
{
q=p;
p=p->next;
}
*value=p->data;
q->next=p->next;
}
void DeleteAt(LinkList L,int *value,int pos)
{
LinkList p,q;
int i;
p=L->next;
q=L;
i=1;
while(p->next!=NULL&&i<pos)
{
i++;
q=p;
p=p->next;
}
*value=p->data;
q->next=p->next;
}
LinkList LocateAt(LinkList L,int pos)
{
LinkList p,q,res;
int i;
p=L->next;
i=1;
while(p!=NULL&&i<pos)
{
i++;
p=p->next;
}
if(p!=NULL&&i==pos)
{
res=p;
}
else
res=NULL;
return res;
}
int FindElem(LinkList L,int value)
{
int i;
LinkList p;
p=L->next;
i=1;
while(p!=NULL)
{
if(p->data==value)
{
break;
}
else
{
i++;
p=p->next;
}
}
if(p!=NULL)
{
return i;
}
else
return 0;
}
int CountElem(LinkList L,int value)
{
int cnt;
LinkList p;
p=L->next;
cnt=0;
while(p!=NULL)
{
if(p->data==value)
cnt++;
p=p->next;
}
return cnt;
}
void MergeList(LinkList La,LinkList Lb)
{
LinkList p,q;
p=Lb->next;
while(p->next!=NULL)
{
InsertBack(La,p->data);
p=p->next;
}
}
int main()
{
LinkList ML,result;
int size,val;
int i,la,lb;
LinkList Ma,Mb;
size=3;
result=(LinkList)malloc(sizeof(LNode));
ML=(LinkList)malloc(sizeof(LNode));
Ma=(LinkList)malloc(sizeof(LNode));
Mb=(LinkList)malloc(sizeof(LNode));
Ma->next=NULL;
Mb->next=NULL;
for(i=1;i<9;i++)
{
InsertFront(Ma,i+14);
InsertFront(Mb,i+37);
}
print(Ma);
print(Mb);
MergeList(Ma,Mb);
print(Ma);
InitList(ML,size);
printf("Print the LinkList:/n");
print(ML);
InsertFront(ML,46);
InsertBack(ML,34);
InsertAt(ML,3,47);
print(ML);
DeleteFront(ML,&val);
printf("%d is deleted/n",val);
DeleteBack(ML,&val);
printf("%d is deleted/n",val);
DeleteAt(ML,&val,2);
printf("%d is deleted/n",val);
print(ML);
result=LocateAt(ML,2);
printf("%d/n",*result);
val=FindElem(ML,48);
if(val!=0)
{
printf("48 is found at %d./n",val);
}
else
printf("48 is not found int ML./n");
val=CountElem(ML,53);
if(val!=0)
{
printf("53 has been found %d times./n",val);
}
else
printf("53 is not found int ML./n");
getch();
return 0;
}