这是使用C语言实现的单链表,不是很健全,但是足以表达原理了。本人水平有限,愿大家在阅读的同时,多给出建议,指出不足之处,谢谢!
#include<stdio.h>
#include<stdlib.h>
typedef struct ListItem
{
int a;
struct ListItem * next;
}Ls;
int main()
{
Ls * ListInit();
void ListAdd(Ls *p);
void traverse(Ls *p);
void freeMem(Ls *p);
void deleteI(int a,Ls *p);
Ls * head;
head = ListInit();
ListAdd(head);
ListAdd(head);
ListAdd(head);
traverse(head);
int flag = 0;
scanf("%d",&flag);
if(flag == 1)
{
deleteI(12,head);
traverse(head);
}
freeMem(head);
return 0;
}
Ls * ListInit()
{
Ls * p;
p = (Ls *)malloc(sizeof(Ls));
p->a = 102;
p->next = NULL;
return p;
}
void ListAdd(Ls *p)
{
while(1)
{
if(p->next == NULL)
{
p->next = (Ls *)malloc(sizeof(Ls));
p->next->a = 12;
p->next->next = NULL;
break;
}
p = p->next;
}
}
void traverse(Ls *p)
{
while(1)
{
printf("%d\n",p->a);
if(p->next == NULL)
{
break;
}
p = p->next;
}
}
void deleteI(int a,Ls *p)
{
Ls *temp;
while(1)
{
if(p->next->a == a)
{
temp = p->next;
p->next = p->next->next;
free(temp);
break;
}
p = p->next;
}
}
//释放内存
void freeMem(Ls *p)
{
Ls * temp;
while(1)
{
temp = p->next;
free(p);
if(p->next == NULL)
{
break;
}
p = temp;
}
}