双向链表随机创建及删除指定元素
/*******双向链表*********/
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct List
{
int data;
struct List *prev,*next;
}List,*LinkList;
LinkList Init_List(LinkList *L)/*初始化双向链表*/
{
(*L)=(LinkList)malloc(sizeof(List));
if(!(*L))
{
printf("Init_List failed!\n");
}
(*L)->prev=NULL;
(*L)->next=NULL;
return *L;
}
LinkList CreateListHead(LinkList *L,int n)/*头插法创建双向链表*/
{
LinkList p,head;
srand(time(NULL));
int i;
(*L)=(LinkList)malloc(sizeof(List));
(*L)->prev=NULL;
(*L)->next=NULL;
head=(*L);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(List));
p->data=rand()%100+1;
//scanf("%d",&p->data);
head->next=p;
p->prev=head;
p->next=NULL;
head=p;
}
(*L)->prev=p;
head->next=(*L);
return *L;
}
void Print_List(LinkList *L)/*依次打印链表中各元素*/
{
LinkList p;
p=(*L)->next;
while(p!=(*L))
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Delete_List(LinkList *L,int element)/********删除链表中特定元素*********/
{
LinkList p;
p=(*L)->next;
while(p!=(*L))
{
if(p->data==element)
{
p->prev->next=p->next;
p->next->prev=p->prev;
free(p);
return;
}
else
p=p->next;
}
printf("The element does not exit in thie list.");
}
int main(int argc, char *argv[])
{
LinkList L;
int e;
Init_List(&L);
CreateListHead(&L,5);
Print_List(&L);
printf("Please enter the data you want to delete:\n");
scanf("%d",&e);
Delete_List(&L,e);
Print_List(&L);
return 0;
}