(删除单链表的指定值)请编写程序删除单链表中所有值为x的元素。并输出删除x后的链表信息。
【输入】第一行整数n(1<=n)
第二行为单链表中的n个整数
第三行 x,x为int类型
【输出】删除x后的单链表信息
例如:
【输入】
6
3 6 9 10 6 1
6
【输出】
3 9 10 1
#include <stdio.h>
#include <stdlib.h>
typedef struct number{
int value;
struct number *next;
}num;
num* add(num* head,int n);
int main()
{
int n;
scanf("%d",&n);
num* head=NULL;
head=add(head, n);
}
num* add(num* head,int n)
{
int i;
for (i=0; i<n; i++) {
num *p=(num*)malloc(sizeof(num));
scanf("%d",&p->value);
p->next=NULL;
num *last=head;
if (head==NULL) {
head=p;
}
else{
while (last->next) {
last=last->next;
}
last->next=p;
}
}
int j;
scanf("%d",&j);
num * shead=(num *)malloc(sizeof(num));
shead->next=head;
num *p=shead;
while (p->next!=NULL) {
if (p->next->value==j) {
num* p1=p->next;
p->next=p1->next;
free(p1);
}
else
p=p->next;
}
head=shead->next;
free(shead);
num *point=head;
while (point->next!=NULL) {
printf("%d ",point->value);
point=point->next;
}
printf("%d",point->value);
return head;
}
代码运行没问题,但是例如 链表中全部是重复元素,需要删除成空表,程序就会崩溃,例如
输入
3
7 7 7
7
目的是删除链表所有元素,程序就无法运行了,请看看如何修改。
用一个头节点来代表整个链表就可以了,这样的话删除全部也会保留下一个头
你第一个循环last每次都=head,那后面还怎么玩
看我博客