2021-03-27

简介: 问题 B: DS单链表—删除重复元素时间限制: 1 Sec 内存限制: 128 MB

问题 B: DS单链表—删除重复元素

时间限制: 1 Sec  内存限制: 128 MB

提交: 128  解决: 77

[提交][状态][讨论版]


题目描述

给定n个整数,按输入顺序建立单链表,删除其中的重复数字,输出结果链表。(要求不可以构建新结点,不可以定义新链表。在原链表上删除。)



输入

测试次数t


每组测试数据一行:


n(表示有n个整数),后跟n个数字




输出

对每组测试数据,输出删除重复数字后的结果链表表长和每个元素,具体格式见样例。


样例输入

3


10 1 2 3 4 1 2 10 20 30 20


5 1 1 1 1 1


6 20 22 22 22 22 20


样例输出

7: 1 2 3 4 10 20 30


1: 1


2: 20 22


]

#include<iostream> 
using namespace std;
class ListNode
{
  int data;
  ListNode *next;
  friend class linklist;
};
class linklist {
  int len;
  ListNode *head;
public:
  linklist() {
    len = 0;
    head = new ListNode();
  }
  ~linklist() {
    delete head;
  }
  ListNode *index(int i) {
    if (i<0 || i>len)
      return NULL;
    ListNode *p = head;
    for (int j = 0; j < i; j++) {
      p = p->next;
    }
    return p;
  }
  int insert(int i, int item) {
    if (i<0 || i>len + 1)
      return -1;
    ListNode *p = index(i - 1);
    ListNode *s = new ListNode();
    s->data = item;
    p->next = s;
    p = p->next;
    len++;
  }
  /*void insert( int item) {
    ListNode *p = head;
    ListNode *s = new ListNode();
    s->data = item;
    p->next = s;
    p = p->next;
    len++;
  }*/
  void del() {
    ListNode *p = head;
    ListNode *q = new ListNode();
    ListNode *m = new ListNode();
    ListNode *s = new ListNode();
    for (int i = 0; p != NULL; i++) {
      p = p->next;
      if (p == NULL)
        break;
      int x = p->data;
      m = p;
      for (int j = i + 1; q!=NULL; j++) {
        ListNode *q = new ListNode();
        q = m->next;
        if (q == NULL)
          break;
        if (x == q->data){
          m->next = q->next;
          delete q;
          len--;
        }
        else {
          m = m->next;
        }
      }
    }
  }
  int getlen() {
    return len;
  }
  void show() {
    ListNode *p;
    p = head->next;
    while (p != NULL) {
      cout << " " << p->data;
      p = p->next;
    }
    cout << endl;
  }
};
int main() {
  int t;
  cin >> t;
  while (t--) {
    linklist list;
    int n, num;
    cin >> n;
    for (int i = 1; i <= n; i++) {
      cin >> num;
      list.insert(i, num);
    }
    //list.show();
    list.del();
    cout << list.getlen() << ":";
    list.show();
  }
  return 0;
}
相关文章
|
存储 弹性计算 数据库
云计算概念和与云服务的区别
“云”在计算机科学和信息技术领域通常指“云计算”,即通过互联网提供计算资源(如服务器、存储、数据库、网络、软件、分析等)的模式。用户可以按需访问和使用这些资源,而无需管理和维护实际的硬件和软件。
1567 3
|
7月前
|
运维 监控 调度
普通人如何用PCDN来赚钱
私有内容分发网络(PCDN)利用分散的终端设备和带宽资源,构建去中心化的内容分发系统。普通人可通过搭建PCDN,利用闲置设备实现低成本、高灵活性的赚钱机会。主要步骤包括硬件准备、选择稳定软件平台、设计网络架构、内容管理和运维监控。盈利模式涵盖提供PCDN服务、广告合作、流量变现及增值服务。通过优化网络配置和设备选择,可最大化收益。尽管存在法律风险和收益波动,但合理搭建和维护能带来可观回报。
12716 0
|
9月前
|
前端开发
Foundation CSS 可见性4
简介:通过使用 `.show-for-touch` 和 `.hide-for-touch` 类,可以根据设备是否支持触屏来控制元素的显示与隐藏。示例中,支持触屏的设备会显示“你的设备支持触屏。”,而不支持的则显示“你的设备不支持触屏。”
使用快捷键的方式把多个关键字文本快速替换(快速替换AE脚本代码)
该内容介绍了一个使用AE(Adobe After Effects)脚本汉化英文的教程。首先提到了两个下载工具的链接,分别来自百度网盘和蓝奏云,并附有提取码。接着展示了AE脚本的替换规则,将英文替换为中文。操作步骤包括:1) 打开工具,设置好规则并执行;2) 在AE中复制要替换的脚本代码;3) 使用快捷键Ctrl+Shift+R进行替换,然后Ctrl+V粘贴修改后的代码。文中还配有多张图片以展示操作过程。
|
存储 Oracle 关系型数据库
实验三 Oracle数据库的创建和管理
实验三 Oracle数据库的创建和管理
224 1
|
数据库 索引
【数据结构】二叉树的原理及实现
【数据结构】二叉树的原理及实现
【数据结构】二叉树的原理及实现
|
存储 分布式计算 大数据
CommunityOverCode Asia 精彩回顾|阿里云开源大数据 EMR 技术实践分享
阿里云开源大数据 EMR 在 CommunityOverCode Asia 的精彩分享。
801 0
|
运维 算法 数据库
浅析数据库算法与数据结构(五)一致性哈希
我们在第二期中讲过,HASH算法是一种非常快速的查找算法,可以用于对数据进行分区和分片。但是有一个问题。根据常规哈希算法算出来的哈希值,通常是无法扩展的,也就是说,假如说,我们一开始想将数据分成四个数据片,随着我们数据量的增长,四个数据片都接近了系统的极限,现在我们想加入一个新的数据片。这时使用传统的哈希算法,通常是无法做到的。只能讲数据重新在汇总起来再重新分成五分,这样就导致了巨大的运维成本。
221 0
浅析数据库算法与数据结构(五)一致性哈希
|
算法 Python
【每日算法打卡】无重复字符的最长子串
【每日打卡系列】LeetCode 简单题 200 道
【每日算法打卡】无重复字符的最长子串
|
弹性计算 Java Linux
ECS使用体验的文章
ECS使用体验的文章