原blog被 误删TAT
大写的尴尬!!!!
数据结构上机测试2-1:单链表操作A
Problem Description
输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。
Input
第一行输入数据个数n;
第二行依次输入n个整数;
第三行输入欲删除数据m。
Output
第一行输出原始单链表的长度;
第二行依次输出原始单链表的数据;
第三行输出完成删除后的单链表长度;
第四行依次输出完成删除后的单链表数据。
Example Input
10
56 25 12 33 66 54 7 12 33 12
12
Example Output
10
56 25 12 33 66 54 7 12 33 12
7
56 25 33 66 54 7 33
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
int n, count, key;
struct node *head, *p, *q, *t;
head = (struct node *)malloc(sizeof(struct node));
head -> next = NULL;
q = head;
scanf("%d",&n);
count = n;
while(n -- ) //建立顺序链表
{
p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&p -> data);
p -> next = NULL;
q -> next = p;
q = p;
}
p = head -> next;
scanf("%d",&key);
printf("%d\n",count);
p = head -> next;
while (p)
{
printf("%d",p -> data);
if (p ->next !=NULL)
printf(" ");
else
printf("\n");
p = p -> next;
}
p = head;
q = p;
while(p) // 删除重复元素
{
while(q->next)
{
if(q->next->data == key)
{
t = q->next;
q->next = t->next;
free(t);
count--;
}
else
q = q->next;
}
p = p->next;
q = p;
}
printf("%d\n",count);
p = head -> next;
while (p) //输出
{
printf("%d",p -> data);
if (p ->next !=NULL)
printf(" ");
else
printf("\n");
p = p -> next;
}
return 0;
}