zoukankan      html  css  js  c++  java
  • L2-002 链表去重 (25 分)

    L2-002 链表去重 (25 分)
     

    给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。

    输入格式:

    输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 − 来表示。

    随后 N 行,每行按以下格式描述一个结点:

    地址 键值 下一个结点
    

    其中地址是该结点的地址,键值是绝对值不超过1的整数,下一个结点是下个结点的地址。

    输出格式:

    首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。

    输入样例:

    00100 5
    99999 -7 87654
    23854 -15 00000
    87654 15 -1
    00000 -15 99999
    00100 21 23854
    

    输出样例:

    00100 21 23854
    23854 -15 99999
    99999 -7 -1
    00000 -15 87654
    87654 15 -1


    PTA特色模拟题
    一开始赋值nxt为-1 默认为没有后续节点 要是有后续节点 执行nxt[pre] = crt, 让上一次的指向当前节点
    比赛的时候没写出来 写的还是挺有感觉的
     1 using namespace std;
     2 #include <stdio.h>
     3 #include <iostream>
     4 #include <algorithm>
     5 int N, M, K, S;
     6 const int si = 100100;
     7 int val[si], nxt[si];
     8 bool vis[si];
     9 int snxt[si], dnxt[si];
    10 int sv[si], dv[si];
    11 int main() {
    12     cin >> S >> N;
    13     for (int i = 0; i < N; i++) {
    14         int adr, v, b;
    15         cin >> adr >> v >> b;
    16         val[adr] = v;
    17         nxt[adr] = b;
    18     }
    19     
    20     int crt = S, dstart = -1, spre = -1, dpre = -1;
    21     while (crt != -1) {
    22         int v = val[crt], n = nxt[crt];
    23         if (!vis[abs(v)]) {
    24             vis[abs(v)] = 1;
    25             if (spre != -1) {
    26                 snxt[spre] = crt;
    27             }
    28             snxt[crt] = -1;//下一个
    29             sv[crt] = v;//v
    30             spre = crt;
    31         }
    32         else {
    33             if (dstart == -1)  {
    34                 dstart = crt;
    35                }
    36                else {
    37                    dnxt[dpre] = crt;
    38                }
    39             dnxt[crt] = -1;
    40             dv[crt] = v;
    41             dpre = crt;
    42         }
    43         crt = n;
    44     }
    45     crt = S;
    46     while (crt != -1) {
    47         printf("%05d %d ", crt, sv[crt]);
    48         if (snxt[crt] != -1) {
    49             printf("%05d
    ", snxt[crt]);
    50         }
    51         else {
    52             printf("%d
    ", snxt[crt]);
    53         }
    54         crt = snxt[crt];
    55     }
    56     
    57     crt = dstart;
    58     while (crt != -1) {
    59         printf("%05d %d ", crt, dv[crt]);
    60         if (dnxt[crt] != -1) {
    61             printf("%05d
    ", dnxt[crt]);
    62         }
    63         else {
    64             printf("%d
    ", dnxt[crt]);
    65         }
    66         crt = dnxt[crt];
    67     }
    68     return 0;
    69 }
     
  • 相关阅读:
    使用YApi搭建API接口管理工具(docker安装)
    Redis 的持久化
    Typora编写markdown插入本地图片时自动上传图片到博客园
    关于python docker镜像环境下无法apt安装wkhtml2pdf的解决方案
    10分钟搞定让你困惑的 Jenkins 环境变量
    基于docker 搭建Prometheus+Grafana的过程详解
    docker方式搭建ELK日志平台
    ingress-nginx跨域解决
    k8s中pod优雅关闭进程
    java反编译命令
  • 原文地址:https://www.cnblogs.com/smatrchen/p/10613726.html
Copyright © 2011-2022 走看看