void deleitem(Node* L, int item)
{
Node* p;
p = L->next;
while (p != L)
{
if (p->date == item)
{
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
}
p = p->next;
}
}
全代码:
#include"stdio.h"
#include"stdlib.h"
typedef struct Node
{
int date;
struct Node* prior;
struct Node* next;
}Node;
Node* create(int data[], int n)
{
Node* head, * s, * rear;
int i;
head = (Node*)malloc(sizeof(Node));
head->prior = NULL;
head->next = NULL;
rear = head;
for (i = 0; i < n; i++)
{
s = (Node*)malloc(sizeof(Node));
s->date = data[i];
s->prior = rear;
s->next = NULL;
rear->next = s;
rear = s;
}
rear->next = head;
head->prior = rear;
return head;
}
void display(Node* L)
{
Node* p;
p = L->next;
while (p != L)
{
printf("%d ", p->date);
p = p->next;
}
printf("\n");
}
void deleitem(Node* L, int item)
{
Node* p;
p = L->next;
while (p != L)
{
if (p->date == item)
{
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
}
p = p->next;
}
}
int main()
{
Node* list = NULL;
int item, i, a[10], num;
printf("输入集合a中元素数:");
scanf_s("%d", &num);
printf("输入集合a中数据元素:");
for (i = 0; i < num; i++)
scanf_s("%d", &a[i]);
list = create(a, num);
printf("输入删除元素item:");
scanf_s("%d", &item);
printf("循环链表中元素为:\n");
display(list);
deleitem(list, item);
printf("删除item元素后:\n");
display(list);
}