排序链表去重

来源:互联网 发布:阿里旅行软件 编辑:程序博客网 时间:2024/06/14 13:40

给定排好序的链表,删除重复元素,只保留重复元素第一次出现的节点。

问题:

给定:2 3 3 5 7 8 8 8 9 9 10

返回:2 3 5 7 8 9 10

解法:若p->next的值和p的值相等,则将p->next->next赋值给p,删除p->next;重复上述过程直至链表尾端。

#include<bits/stdc++.h>using namespace std;struct node{    int val;    node *next;    node(int v):val(v),next(NULL){}};void print(node *hea){    node *p=hea;    int f=0;    while(p)    {        if(f)            printf(" ");        printf("%d",p->val);        f=1;        p=p->next;    }    printf("\n");}void qc(node *hea){    node *p,*qi=hea;    while(qi)    {        p=qi->next;        if(p&&p->val==qi->val)        {            qi->next=p->next;            delete p;        }        else            qi=p;    }    print(hea);}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        int num;        node *tail,*tmp,*hea;        tail=new node(0);        for(int i=0;i<n;i++)        {            scanf("%d",&num);            tmp=new node(num);            if(i==0)                hea=tmp;            tail->next=tmp;            tail=tmp;        }        qc(hea);    }    return 0;}


 

0 0