**
*********要学会学习经验而不是靠 蛮力耗时间!
借刀鲨人
删除链表中多个指定元素
#include<stdio.h>
#include<stdlib.h>
typedef struct node LinkList;
struct node {
int data;
LinkList* next;
};
//createlist
LinkList* creatlistL(LinkList* L, int n) {
LinkList* p;
L = NULL;
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
for (int i = 0; i < 10; i++) {
p = (LinkList*)malloc(sizeof(LinkList));
scanf_s("%d", &p->data);
p->next = L->next;
L->next = p;
}
return L;
}
//删除指定元素
LinkList* deletenode(LinkList* L, int m) {
LinkList* p, * q, * r;
p = L;
q = L->next;
while (q) {
if (q->data == m) {
p->next = q->next;// 前一个next指向 后一个
r= q; //存 被删节点
q = q->next;// 移动指针 后一个和被删节点断开
free(r);
}
else {
p = p->next;// 移动指针
q = q->next;// 移动指针
}
}
return L;// 返回
}
//输出链表
void printlist(LinkList* L) {
LinkList* p;
p = L->next;
if (!p) {
printf("The link is NULL!");
}
while (p) {
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkList*List;
int n = 0, num = 0;
List = NULL;
List = creatlistL(List, n);
printf("\n");
printlist(List);
printf("请输入要输入删除的元素:");
scanf_s("%d", &num);
printf("\n");
List = deletenode(List, num);
printlist(List);
}