L2-002 链表去重 (25 分)

Posted xyfs99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-002 链表去重 (25 分)相关的知识,希望对你有一定的参考价值。

错误代码,写了一个多小时还是错的,而且只有两分,悲伤逆流成河

#include <iostream>
#include <map>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
map<int,int>mp;
typedef struct List
{
    int ard,data,nard;
    struct List *next;
}List;
List* CreatList(int n)
{
    List *head,*q,*p;
    head=(List*)malloc(sizeof(List));
    head->next=NULL;
    q=head;
    for(int i=0;i<n;i++)
    {
        p=(List*)malloc(sizeof(List));
        scanf("%d %d %d",&p->ard,&p->data,&p->nard);
        p->next=NULL;
        q->next=p;
        q=p;
    }
    return head;
}
List* Delete(List *head,List *head1)
{
    List *q,*p,*k,*t,*s;
    head->data=99999;
    q=head;
    p=head;
    head1->next=NULL;
    t=head1;
    while(q->next!=NULL)
    {
        int a=fabs(q->next->data);
        mp[a]++;
        if(q->next->data==p->data)
        {
            k=q->next;
            p->next=q->next->next;
            mp[a]--;
            s=(List*)malloc(sizeof(List));
            s->ard=k->ard;
                s->data=k->data;
                s->nard=k->nard;
                s->next=NULL;
            t->next=s;
            t=s;
            free(k);
        }
        else
        {
            if(mp[a]>1)
            {
                k=q->next;
                p->next=q->next->next;
                mp[a]--;
                s=(List*)malloc(sizeof(List));
                s->ard=k->ard;
                s->data=k->data;
                s->nard=k->nard;
                s->next=NULL;
                t->next=s;
                t=s;
                free(k);
            }
            else
            {
                q=q->next;
                p=p->next;
            }
            
        }
    }
    return head;
}
List* Sort(int start,int n,List *head)
{
    List *q,*head1,*p,*t,*k;
    head1=(List*)malloc(sizeof(List));
    head1->next=NULL;
    q=head1;
    t=head;
    for(int i=0;i<n;i++)
    {
        t=head;
        while(t->next!=NULL)
        {
            if(t->next->ard==start)
            {
                p=t->next;
                k=(List*)malloc(sizeof(List));
                start=p->nard;
                k->ard=p->ard;
                k->data=p->data;
                k->nard=start;
                k->next=NULL;
                q->next=k;
                q=k;
                t->next=p->next;
                free(p);
                break;
            }
            t=t->next;
        }
    }
    return head1;

}
void Print(List *head)
{
    head=head->next;
    while(head!=NULL)
    {
        if(head->nard>=0)
        printf("%05d %d %05d
",head->ard,head->data,head->nard);
        else
        printf("%05d %d -1
",head->ard,head->data);
        head=head->next;
    }
}
int main()
{
   int start,n;
   cin>>start>>n;
   List *p=CreatList(n);
   List *q=Sort(start,n,p);
   List *t=Delete(q,p);
   Print(t);
   Print(p);
}

 

以上是关于L2-002 链表去重 (25 分)的主要内容,如果未能解决你的问题,请参考以下文章

L2-002. 链表去重

pat L2-002 链表去重

L2-002 链表去重(链表+模拟)

L2-002. 链表去重(模拟)

PTA团体程序设计天梯赛-练习集 L2题目总结(完)

链表去重