IVVANO 2022-04-12 19:51 采纳率: 100%
浏览 62
已结题

【单链表删除重复数据】在本地vs上运行没有问题,上传到oj系统是答案错误,请问有什么错误呀?实在找不出来了

题目内容

给定一个升序的单链表,删除单链表中的重复数据项,只保留独立的元素。

img

img

问题相关代码
#include <iostream>
using namespace std;

template <class T>
structhttps://img-mid.csdnimg.cn/release/static/image/mid/ask/591763467946145.png "#left")
 Node
{
    T data = 0;                    
    struct Node <T>* next;  
    Node() :data(0), next(NULL){}
    void print()
    {
        cout << data <<" ";
    }
};

template<class T>
class LinkList
{
public:
    LinkList()
    {
        front = new Node <T>;
        front->next = NULL;
    }
    LinkList(T a[], int n)
    {
        front = new Node<T>;
    int i;
    for (i = n - 1; i >= 0; i--)
    {
        Node <T>* s = new Node<T>;
        s->data = a[i];
        s->next = front->next;
        front->next = s;
    }
    }
    void PrintList();
    void DeleteRe();
private:
    Node <T>* front;
};

template<class T>
void LinkList<T>::PrintList()
{
    if (front->next == NULL)
    {
        cout << "empty" ;
    }
    else
    {
        Node<T>* p = front->next;
        while (p)
        {
            p->print();
            p = p->next;
        }
    }
}

template<class T>
void LinkList<T>::DeleteRe()
{ 
    if (front == NULL)
    {
        return;
    }
    Node<T>* p = front ;
        while (p->next&&p->next ->next)
        {
            
            if (p->next->data ==p->next->next->data)
            {
                Node<T>* q = p->next->next;
                while (q && q->data == p->next ->data)
                {
                    q = q->next;
                }
                p->next = q;
            }
            else
            {
                p = p->next;
            }
        }
}

int main()
{
    int len;
    cin >> len;
    if (len <= 0)
    {
        return 0;
    }
    else
    {
        int *array=new int [len];
        for (int i = 0; i < len; i++)
        {
            cin >> array[i];
        }
        LinkList<int> L1(array, len);

        L1.DeleteRe();
        L1.PrintList();
        return 0;
    }
}
运行结果及报错内容

img


oj上看不到问题到底是什么

要求用链表实现
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-04-13 16:09
    关注

    修改如下,供参考:

    #include <iostream>
    using namespace std;
    template <class T>
    //structhttps://img-mid.csdnimg.cn/release/static/image/mid/ask/591763467946145.png "#left")
    struct Node
    {
        T data = 0;
        struct Node <T>* next;
        Node() :data(0), next(NULL) {}
        void print()
        {
            cout << data << " ";
        }
    };
    template<class T>
    class LinkList
    {
    public:
        LinkList()
        {
            front = new Node <T>;
            front->next = NULL;
        }
        LinkList(T a[], int n)
        {
            front = new Node<T>;
            int i;
            for (i = n - 1; i >= 0; i--)
            {
                Node <T>* s = new Node<T>;
                s->data = a[i];
                s->next = front->next;
                front->next = s;
            }
        }
        void PrintList();
        void DeleteRe();
    private:
        Node <T>* front;
    };
    template<class T>
    void LinkList<T>::PrintList()
    {
        if (front->next == NULL)
        {
            cout << "empty";
        }
        else
        {
            Node<T>* p = front->next;
            while (p)
            {
                p->print();
                p = p->next;
            }
        }
    }
    template<class T>
    void LinkList<T>::DeleteRe()
    {
        if (front == NULL)
        {
            return;
        }
        Node<T>* p = front;
        while (p->next)             //&& p->next->next)
        {
            if (p->next->data == p->next->next->data)
            {
                Node<T>* q = p->next->next;
                while (q && q->data == p->next->data)
                {
                    Node<T>* r = q;
                    q = q->next;
                    delete r;
                }
                Node<T>* r = p->next;
                p->next = q;
                delete r;
            }
            else
            {
                p = p->next;
            }
        }
    }
    int main()
    {
        int len;
        cin >> len;
        if (len <= 0)
        {
            return 0;
        }
        else
        {
            int* array = new int[len];
            for (int i = 0; i < len; i++)
            {
                cin >> array[i];
            }
            LinkList<int> L1(array, len);
    
            L1.DeleteRe();
            L1.PrintList();
            return 0;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 修改了问题 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 潜在扩散模型的Unet特征提取