题目描述
KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。
输入描述:
包括三行: 第一行输入数据个数n (3≤n≤100); 第二行依次输入n个整数,用空格分隔;
第三行输入欲删除数据m。
输出描述:
包括两行: 第一行输出完成删除后的单链表长度;
第二行依次输出完成删除后的单链表数据。
示例1
输入 5 1 2 2 3 4 2 输出 3 1 3 4
#include<cstdio>
#include<iostream>
using namespace std;
struct linklist
{
int data;
linklist* next;
};
int main()
{
linklist* a = new linklist;
linklist* b=a;
int n,k;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
linklist* p=new linklist;
scanf("%d",&p->data);
b->next=p;
b=b->next;
}
linklist* q=a->next;
scanf("%d",&k);
linklist* l=a;
while(q!=NULL)
{
if(q->data==k)
{
l->next=q->next;
free(q);
q=l->next;
n--;
}
else
{
l=l->next;
q=q->next;
}
}
linklist* o=a;
printf("%d\n",n);
while(o->next!=NULL)
{
printf("%d ",o->next->data);
o=o->next;
}
return 0;
}
注意:循环开辟空间是有必要的,如果在循环内没有new语句会报错,您的程序发生段错误。