数据结构实验之链表七:单链表中重复元素的删除

来源:互联网 发布:nba主帅数据排名 编辑:程序博客网 时间:2024/06/11 11:05

Problem Description
按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。
Input
第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。
Output
第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。
Example Input
10
21 30 14 55 32 63 11 30 55 30
Example Output
10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21

runtime error :数组越界,指针指向

#include <stdio.h>#include <stdlib.h>typedef int elemtype;typedef struct lnode{    elemtype data;    struct lnode *next;}lnode,*linklist;linklist creat(int n)//逆序建表{    lnode *head,*p;    head=new lnode;    head->next=NULL;    for(int i=0;i<n;i++)    {        p=new lnode;        scanf("%d",&p->data);        p->next=NULL;        p->next=head->next;        head->next=p;    }    return head;}linklist del(linklist head, int &n)//&n是为了对n做出改变{    lnode *p,*q,*t;    p=head->next;    while(p)    {        t=p;        q=t->next;        while(q)        {            if(q->data==p->data)            {                t->next=q->next;                free(q);                q=t->next;                n--;            }            else            {                t=q;                q=q->next;            }        }        p=p->next;    }    return head;}void output(linklist head){    lnode *p;    p=head->next;    printf("%d",p->data);    p=p->next;    while(p)    {        printf(" %d",p->data);        p=p->next;    }    printf("\n");}int main(){    linklist head;    int n;    scanf("%d",&n);    head=creat(n);    printf("%d\n",n);//输出要求看好    output(head);    head=del(head,n);    printf("%d\n",n);//因为del函数中&n,所以n已经改变    output(head);    return 0;}
阅读全文
0 0
原创粉丝点击