实现单链表的数据插入和删除。
#include <stdio.h>
#include <stdlib.h>
typedef struct list{
int data;
struct list* next;
}List;
void print_list(List* head)
{
while(head)//这里直接用head,因为这里只需要遍历链表
{
printf("%d\n", head->data);
head=head->next;
}
}
void insert_list(List* head,int d)
{
List* ins=(List*)malloc(sizeof(List));
ins->data=d;
ins->next=head->next;
head->next=ins;
}
void delete_list(List* head,int d)
{
List* deletelt;
while(head->next)//找到要删除的list,然后head->next指向deletelt->next
{
if(head->next->data == d)
{
deletelt=head->next;
head->next=deletelt->next;
free(deletelt);
}
else
head=head->next;
}
}
int main()
{
List* head=(List*)malloc(sizeof(List));
head->next=NULL;
head->data=-1;
int i=0,n=10;
for(i=0;i<n;i++)
insert_list(head,random()%n);
print_list(head);
printf("\n");
for(i=0;i<10*n;i++)
delete_list(head,random()%n);
print_list(head);
}
实现双链表的数据插入和删除。思路和单链表差不多,在删除的时候要注意考虑要删除的链表deletedlt的next是空还是非空的情况
#include <stdio.h>
#include <stdlib.h>
typedef struct doublelist{
int data;
struct doublelist* next;
struct doublelist* pre;
}DoubleList;
void print_doublelist(DoubleList* dhead)
{
while(dhead)
{
printf("%d\n", dhead->data);
dhead=dhead->next;
}
}
void insert_doublelist(DoubleList* dhead,int d)
{
DoubleList* ins=(DoubleList*)malloc(sizeof(DoubleList));
ins->data=d;
ins->next=dhead->next;
ins->pre=dhead;
dhead->next=ins;
}
void delete_doublelist(DoubleList* dhead,int d)
{
DoubleList* deletedlt;
while(dhead->next && dhead->next->next)//要删除的链表deletedlt的next是非空的情况
{
if(dhead->next->data == d)
{
deletedlt=dhead->next;
deletedlt->next->pre=deletedlt->pre;
dhead->next=deletedlt->next;
free(deletedlt);
}
else
dhead=dhead->next;
}
if(dhead->next && dhead->next->next==NULL)//deletedlt的next是空的情况
{
if(dhead->next->data == d)
{
deletedlt=dhead->next;
dhead->next=NULL;
free(deletedlt);
}
}
}
int main()
{
DoubleList* dhead=(DoubleList*)malloc(sizeof(DoubleList));
dhead->next=dhead->pre=NULL;
dhead->data=-1;
int i=0,n=10;
for(i=0;i<n;i++)
insert_doublelist(dhead,random()%n);
print_doublelist(dhead);
printf("\n");
for(i=0;i<n;i++)
delete_doublelist(dhead,random()%n);
print_doublelist(dhead);
return 0;
}