#include<stdio.h>
#include <stdlib.h>
#include"linkedList.h"
lNode * headInsert(lNode * first,ElemType x)
{
lNode * p = (lNode *)malloc(sizeof(lNode));
p->data = x;
p->next = NULL;
if(first == NULL)
{
return p;
}
else
{
p->next = first;
return p;
}
}
lNode * tailInsert(lNode * first,ElemType x)
{
lNode * p = (lNode *)malloc(sizeof(lNode));
p->data = x;
p->next = NULL;
if(first == NULL)
{
return p;
}
else
{
lNode * last = first;
while(last->next)
{
last = last->next;
}
last->next = p;
return first;
}
}
void printfLkList(lNode * first)
{
lNode * p = first;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int find(lNode * first,ElemType x)
{
lNode * p = first;
while(p)
{
if(p->data == x)
{
return 1;
}
p = p->next;
}
return 0;
}
void clearLkList(lNode * first)
{
lNode *p = first;
while(p)
{
first = p->next;
p->next = NULL;
free(p);
p = first;
}
}
lNode * delete(lNode * first,ElemType x)
{
lNode * p = first;
lNode * r = NULL;
while(p)
{
if(p->data == x)
{
break;
}
r = p;
p = p->next;
}
if(p == NULL)
{
return first;
}
else
{
if(p == first)
{
first = first->next;
p->next = NULL;
free(p);
}
else if(p->next == NULL)
{
r->next = NULL;
free(p);
}
else
{
r->next = p->next;
p->next = NULL;
free(p);
}
return first;
}
}
lNode * deleteAll(lNode * first,ElemType x)
{
while(1)
{
lNode * p = first;
lNode * r = NULL;
while(p)
{
if(p->data == x)
{
break;
}
r = p;
p = p->next;
}
if(p == NULL)
{
return first;
}
else
{
if(p == first)
{
first = first->next;
p->next = NULL;
free(p);
}
else if(p->next == NULL)
{
r->next = NULL;
free(p);
}
else
{
r->next = p->next;
p->next = NULL;
free(p);
}
}
}
}
lNode * inversion(lNode * first)
{
if(first == NULL)
return NULL;
lNode * newFirst = NULL;
lNode * p = first;
while(p)
{
first = first->next;
p->next = NULL;
if(newFirst == NULL)
{
newFirst = p;
}
else
{
p->next = newFirst;
newFirst = p;
}
p = first;
}
return newFirst;
}
#ifndef __LINKEDLIST_H__
#define __LINKEDLIST_H__
typedef int ElemType;
struct linkedListnode
{
ElemType data;
struct linkedListnode *next;
};
typedef struct linkedListnode lNode;
lNode * headInsert(lNode * first,ElemType x);
lNode * tailInsert(lNode * first,ElemType x);
void printfLkList(lNode * first);
int find(lNode * first,ElemType x);
void clearLkList(lNode * first);
lNode * delete(lNode * first,ElemType x);
lNode * deleteAll(lNode * first,ElemType x);
lNode * inversion(lNode * first);
#endif
```c
#include<stdio.h>
#include"linkedList.h"
void test01()
{
lNode * first = NULL;
first = headInsert(first,10);
first = headInsert(first,20);
first = headInsert(first,30);
first = headInsert(first,40);
printfLkList(first);
first = inversion(first);
printfLkList(first);
clearLkList(first);
}
void test02()
{
lNode * first = NULL;
first = tailInsert(first,20);
first = tailInsert(first,10);
first = tailInsert(first,20);
first = tailInsert(first,30);
first = tailInsert(first,20);
first = tailInsert(first,40);
first = tailInsert(first,20);
printf("%s:%d\n",__FUNCTION__,__LINE__);
printfLkList(first);
printf("%s:%d\n",__FUNCTION__,__LINE__);
int x;
scanf("%d",&x);
first = deleteAll(first, x);
printfLkList(first);
clearLkList(first);
}
int main()
{
test01();
return 0;
}