华为笔试题05

  • 题目描述:

输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。

  • 要求实现函数:

void vChanProcess(strNode * pstrIn,strNode * pstrOut);

【输入】 pstrIn:输入一个不带头节点的单向链表

【输出】 pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请)。

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

  • 示例

输入链表的内容依次为 6,7,8,8,9,10,6

则输出链表的内容依次应该是 10,9

关键部分代码为

    int len=20;
    int *a=new int [len];
    for(int i=0;i<len;++i)
    {
        a[i]=rand()%7;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    set<int> sto;
    for(int i=0;i<len;++i)
    {
        int temp=a[i];
        for(int j=i+1;j<len;j++)
        {
            if(a[j]==temp)
            {
                sto.insert(j);
                sto.insert(i);
            }
        }
    }
    vector<int> out;
    int count=0;
    for(int i=0;i<len;++i)
    {
        set<int>::iterator iter;
        iter=find(sto.begin(),sto.end(),i);
        if(iter==sto.end())
        {
            out.push_back(a[i]);
            count++;
        }
    }
    for(vector<int>::iterator iter1=out.begin();iter1!=out.end();++iter1)
        cout<<*iter1<<" ";
    return 0;

  

原文地址:https://www.cnblogs.com/xd-jinjian/p/3277021.html