返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 实现L2-002 链表去重
  • 112
分享到

C++ 实现L2-002 链表去重

2024-04-02 19:04:59 112人浏览 八月长安
摘要

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

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

输入格式:

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

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

地址 键值 下一个结点

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

输出格式:

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

输入样例:

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

思路:
很多办法都可以实现,我选择数组模拟动态内存,先建立一个链表再遍历,时间复杂度是O(n),格式控制还是printf好用。


#include<iOStream>
#include<cstdio>
#include<cmath>
#define NULL -1

using namespace std;

typedef struct node {
	int val;
	unsigned int next;
}node;

node store[100001];//开辟一片模拟内存
int flag[10001];//标记结点

int main() {
	int num, startM;//p标记当前节点
	cin >> startM >> num;

	for (int i = 0; i < num; i++) {
		int now, val, next;
		cin >> now >> val >> next;
		store[now].val = val;
		store[now].next = next;
	}//链表构建完成

	int p1=startM,startS=NULL;
	int p2 = 100000,pre;
	bool k = true;
	while (p1 != NULL) {
		if (flag[abs(store[p1].val)] != 0) {
			store[pre].next = store[p1].next;
			store[p2].next = p1;
			store[p1].next = NULL;
			p2 = p1;
			if (k) {
				k = false;
				startS = p2;
			}
			p1 = store[pre].next;
		}
		else {
			flag[abs(store[p1].val)] = 1;
			pre = p1;
			p1 = store[p1].next;
		}
	}//链表查重完成

	p1 = startM;
	while (p1 != NULL) {
		if(store[p1].next!=NULL)
			printf("%05d %d %05d\n",p1, store[p1].val, store[p1].next);
		else
			printf("%05d %d %d\n", p1, store[p1].val, store[p1].next);
		p1 = store[p1].next;
	}
	p1 = startS;
	while (p1 != NULL) {
		if (store[p1].next != NULL)
			printf("%05d %d %05d\n", p1, store[p1].val, store[p1].next);
		else
			printf("%05d %d %d\n", p1, store[p1].val, store[p1].next);
		p1 = store[p1].next;
	}
	return 0;
}

到此这篇关于c++ 实现L2-002 链表去重的文章就介绍到这了,更多相关C++ 链表去重内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 实现L2-002 链表去重

本文链接: https://lsjlt.com/news/129928.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 实现L2-002 链表去重
    给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 ...
    99+
    2024-04-02
  • 怎么用C++实现L2-002链表去重
    本篇内容介绍了“怎么用C++实现L2-002链表去重”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!给定一个带整数键值的链表 L,你需要把其中...
    99+
    2023-06-20
  • C++实现LeetCode(143.链表重排序)
    [LeetCode] 143.Reorder List 链表重排序 Given a singly linked list L: L0→L1→…→Ln-1→Ln, ...
    99+
    2024-04-02
  • C++实现旋转链表
    这篇文章主要介绍“C++实现旋转链表”,在日常操作中,相信很多人在C++实现旋转链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现旋转链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧![Leet...
    99+
    2023-06-20
  • C++如何实现单链表
    小编给大家分享一下C++如何实现单链表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单链表的实现(从入门到熟练)概念和结构概念:链表是一种物理存储结构上非连续、非...
    99+
    2023-06-29
  • C++怎么实现单链表
    本文小编为大家详细介绍“C++怎么实现单链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现单链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单链表链表内存空间不一定连续,其扩展性较好。多余的不多...
    99+
    2023-07-02
  • Python列表去重怎么实现
    可以通过使用set()函数,将列表转换为集合,实现列表去重。例如:lst = [1, 2, 3, 3, 4, 5, 5]new_ls...
    99+
    2023-10-20
    Python
  • C++实现LeetCode(206.倒置链表)
    [LeetCode] 206.Reverse Linked List 倒置链表 Reverse a singly linked list. Example: Input: 1-&g...
    99+
    2024-04-02
  • C++实现LeetCode(86.划分链表)
    [LeetCode] 86.Partition List 划分链表 Given a linked list and a value x, partition it such...
    99+
    2024-04-02
  • C++实现LeetCode(61.旋转链表)
    [LeetCode] 61. Rotate List 旋转链表 Given the head of a linked list, rotate the ...
    99+
    2024-04-02
  • C++实现LeetCode(148.链表排序)
    [LeetCode] 148. Sort List 链表排序 Sort a linked list in O(n log n) time using c...
    99+
    2024-04-02
  • C++代码实现双向链表
    本文实例为大家分享了C++实现双向链表的具体代码,供大家参考,具体内容如下 双向链表:两个指针域,一个指向前结点,一个指向后结点 list.h #pragma once #defin...
    99+
    2024-04-02
  • C++怎么实现链表排序
    本篇内容主要讲解“C++怎么实现链表排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现链表排序”吧!链表排序Sort a linked list in O(n ...
    99+
    2023-06-20
  • c语言链表如何实现
    这篇“c语言链表如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c语言链表如何实现”文章吧。在计算机领域离不开算法和数...
    99+
    2023-06-19
  • C++怎么实现双向链表
    这篇“C++怎么实现双向链表”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现双向链表”文章吧。前言:前面文章分析...
    99+
    2023-06-29
  • C++实现通用双向链表
    使用C++完成双向通用链表双向链表不用多说,通用链表因为数据结构不确定的,使用一个VOID指针指向数据,什么数据都可以挂上去,这样来封装链表,可以作为基础类也可以单独使用,这里只是为了练习C++封装的语法,实现了简单的增加和删除链表由于实际...
    99+
    2023-06-04
  • C++实现LeetCode(83.移除有序链表中的重复项)
    [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项 Given a sorted linked list, d...
    99+
    2024-04-02
  • 如何使用python实现列表去重
    小编给大家分享一下如何使用python实现列表去重,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python实现列表去重的方法先...
    99+
    2024-04-02
  • C++详解如何实现单链表
    目录单链表单链表的基本操作1.初始化2.取值3.查找4.插入5.删除示例代码开发环境运行结果单链表 链表内存空间不一定连续,其扩展性较好。多余的不多说了。该文主要记录单链表的实现,该...
    99+
    2024-04-02
  • C++中怎么实现链表操作
    C++中怎么实现链表操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C++链表操作代码示例:// linklist.cpp : 定义控制台应用程...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作