7-93 链表去重 (25 分)

简介: 7-93 链表去重 (25 分)

7-93 链表去重 (25 分)


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


输入格式:


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


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


地址 键值 下一个结点



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


输出格式:


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


输入样例:


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


#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
struct ll{
    int data;
    int next;
}List[N];
int pre[N] ,post[N] ,r1 ,r2 ,head ,n ,loc ,key[N];
int main(){
    cin >> head >> n;
    while (n--) {
        cin >> loc;
        cin >> List[loc].data >> List[loc].next;
    }
    while (head != -1) {
        if (key[abs(List[head].data)]) {
            post[r2++] = head;
            post[r2] = -1;
            head = List[head].next;
        }
        else{
            key[abs(List[head].data)] = 1;
            pre[r1++] = head;
            pre[r1] = -1;
            head = List[head].next;
        }
    }
    for (int i = 0; i < r1; i++) {
        if (pre[i + 1] != -1) 
            printf("%05d %d %05d\n" ,pre[i] ,List[pre[i]].data ,pre[i + 1]);
        else
            printf("%05d %d -1\n" ,pre[i] ,List[pre[i]].data );
    }
    for (int i = 0; i < r2; i++) {
        if (post[i + 1] != -1) 
            printf("%05d %d %05d\n" ,post[i] ,List[post[i]].data ,post[i + 1]);
        else
            printf("%05d %d -1\n" ,post[i] ,List[post[i]].data );
    }
    return 0;
}
目录
相关文章
|
算法 Java
【Java算法】链表合并去重算法
【Java算法】链表合并去重算法
115 0
|
C语言 C++
C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II
C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II
102 0
L2-002 链表去重 (25 分)(结构体模拟)
L2-002 链表去重 (25 分)(结构体模拟)
148 0
团体程序设计天梯赛-练习集 - L2-002 链表去重(25 分)
团体程序设计天梯赛-练习集 - L2-002 链表去重(25 分)
128 0
|
8月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
7月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
7月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
7月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
69 2
|
8月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
82 1

热门文章

最新文章