数据结构上机测试2-2:单链表操作B

来源:互联网 发布:网络机柜 编辑:程序博客网 时间:2024/05/19 00:47

数据结构上机测试2-2:单链表操作B

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

输入

第一行输入元素个数n;
第二行输入n个整数。

输出

第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

示例输入

1021 30 14 55 32 63 11 30 55 30

示例输出

1030 55 30 11 63 32 55 14 30 217

30 55 11 63 32 14 21

#include<stdio.h>#include<malloc.h>struct node{    int number;    struct node* next;};struct node* Create(int num){    struct node* head,*p;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    for(int i=0;i<num;i++)    {        p=(struct node*)malloc(sizeof(struct node));        scanf("%d",&p->number);        p->next=head->next;        head->next=p;    }    return head;};int Delete(struct node* head,int num){    struct node *p,*q,*k;    int num1=num;    p=head;    while(p)    {        q=p;        k=q->next;        while(k)        {            if(k->number==p->number)            {                q->next=k->next;                free(k);                k=q->next;                num1--;            }            else            {                q=k;                k=q->next;            }        }        p=p->next;    }    return num1;}void shuchu(struct node*head){    struct node *p;    p=head->next;    while(p)    {        if(p==head->next)            printf("%d",p->number);        else            printf(" %d",p->number);        p=p->next;    }    printf("\n");}int main(){    int n,n1;    int key;    struct node *head;    scanf("%d",&n);    head=Create(n);    printf("%d\n",n);    shuchu(head);    n1=Delete(head,n);    printf("%d\n",n1);    shuchu(head);}


0 0