1. 思路
1.1 按值删除
1.2 排序
1.3 反转
2. 代码
2.1 DList.h
//按值删除
void delete_val(List *list, ElemType x);
//排序
void sort(List *list);
//反转
void resver(List *list);
2.2 DList.cpp
void delete_val(List *list, ElemType x)
{
Node *s = find(list, x);
if(s == NULL)
{
printf("链表中没有该值,无法删除\n");
return;
}
s->next->prior = s->prior;
s->prior->next = s->next;
if(s == list->last)
{
list->last = s->prior;
list->last = NULL;
}
free(s);
list->size--;
}
void sort(List *list)
{
if(list->size == 0 || list->size == 1)
return;
Node *p = list->first->next;
Node *s = p->next;
list->last = p;
list->last->next = NULL;
while(s != NULL)
{
p = s;
s = s->next;
Node *q = list->first->next;
while(q->next != NULL && q->next->data < p->data)
{
q = q->next;
}
if(q->next == NULL)
{
p->prior = list->last;
list->last->next = p;
list->last = p;
list->last->next = NULL;
}
else
{
p->next = q->next;
q->next->prior = p;
q->next = p;
p->prior = q;
}
}
}
void resver(List *list)
{
if(list->size == 0 || list->size == 1)
return;
Node *p = list->first->next;
Node *s = p->next;
list->last = p;
list->last->next = NULL;
while(s != NULL)
{
p = s;
s = s->next;
p->next = list->first->next;
list->first->next->prior = p;
p->prior = list->first;
list->first->next = p;
}
}
2.3 main.cpp
case 9:
printf("请输入要删除的值:");
scanf("%d", &Item);
delete_val(&mylist, Item);
break;
case 10:
sort(&mylist);
break;
case 11:
resver(&mylist);
break;