數據結構上機測試2-2:單鏈表操作B

數據結構上機測試2-2:單鏈表操作B

Time Limit: 1000MS Memory limit: 65536K

題目描述

按照數據輸入的相反順序(逆位序)建立一個單鏈表,並將單鏈表中重複的元素刪除(值相同的元素只保留最後輸入的一個)。

輸入

第一行輸入元素個數n;
第二行輸入n個整數。

輸出

第一行輸出初始鏈表元素個數;
第二行輸出按照逆位序所建立的初始鏈表;
第三行輸出刪除重複元素後的單鏈表元素個數;
第四行輸出刪除重複元素後的單鏈表。

示例輸入

10
21 30 14 55 32 63 11 30 55 30

示例輸出

10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21
#include <stdlib.h>   
struct node  
{  
    int data;  
    struct node *next;  
};  
int main()  
{  
    int n,i,m=0;  
    struct node *head,*p,*r,*q,*t;  
    head=(struct node*)malloc(sizeof(struct node));  
    head->next=NULL;  
    scanf("%d",&n);  
    for(i=0;i<n;i++)  
    {  
        p=(struct node*)malloc(sizeof(struct node));  
        scanf("%d",&p->data);  
        p->next=head->next;  
        head->next=p;  
    }  
    printf("%d\n",n);  
    p=head->next;  
    while(p)  
    {  
        if(p->next!=NULL)  
            printf("%d ",p->data);  
        else printf("%d",p->data);  
        p=p->next;  
    }  
    p=head->next;  
    while(p->next)  
    {  
        q=p;  
        while(q->next)  
        {  
            if(q->next->data==p->data)  
            {  
                r=q->next;  
                q->next=r->next;  
                free(r);  
                m++;  
            }  
            else q=q->next;  
        }  
        p=p->next;  
    }  
    printf("\n%d\n",n-m);  
    p=head->next;  
    while(p)  
    {  
        if(p->next!=NULL)  
            printf("%d ",p->data);  
        else printf("%d",p->data);  
        p=p->next;  
    }  
    return 0;  
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章