社区
数据结构与算法
帖子详情
链表问题
Aylazhang
2009-03-27 10:36:47
1,3
3,5
5,90
2,4
4,-1
90,100
100,-1
10,11
11,12
12,13
13,-1
14,-1
想把如上的数据结构整理为
1->3->5->90->100->-1
2->4->-1
10->11->12->13->-1
14->-1
简单说来,就是把第一列的值和第二列的值串起来,条件是前一个第二列的值等于后一个第一列的值,到-1为一条链的结束。
请帮助。
...全文
273
11
打赏
收藏
链表问题
1,3 3,5 5,90 2,4 4,-1 90,100 100,-1 10,11 11,12 12,13 13,-1 14,-1 想把如上的数据结构整理为 1->3->5->90->100->-1 2->4->-1 10->11->12->13->-1 14->-1 简单说来,就是把第一列的值和第二列的值串起来,条件是前一个第二列的值等于后一个第一列的值,到-1为一条链的结束。 请帮助。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fibbery
2009-04-24
打赏
举报
回复
[Quote=引用 10 楼 Aylazhang 的回复:]
还有新方法么?
5楼的方法不太明了。
[/Quote]
可以使用散列方法,key=>value对,那么,f(f(1))就应该等于5,这样同样可以遍历所谓的链表。
Aylazhang
2009-04-02
打赏
举报
回复
还有新方法么?
5楼的方法不太明了。
fire_woods
2009-03-31
打赏
举报
回复
对每个新加进来的数字组,只要看当前所有链表中最后一个数字是否与这个组的第一个数字一样,
如果一样,加到这个链表,否则,以当前组新建一个链表.
fenix124
2009-03-31
打赏
举报
回复
很明显每个数字只能在左边出现一次。
标记一下每个数字在左右出现的次数,只是在左边出现,则它一定为起点。
每个起点往后面找就可以了。
实现方便的话用两个stl map来实现比较方便,链表都免了。
nkmily
2009-03-31
打赏
举报
回复
回复4楼
要想实现动态增加链表数量,我觉得可以先定义vector< list <int>> a;
然后对每次输入得数据判断,如果能加到已存在的链表里就加入,如果没有符合要求得链表,就在vector尾部动态加入一个链表
sefule
2009-03-31
打赏
举报
回复
用一数组记录表头指针.开始构造链表.
1.第一个链表将表头元素放入数组中,依次构造链表,直到-1出现.
2.第二个链表,每次加入元素前都判断是否等于数组中的指针说指向的元素值.如果等于就表尾与之连接.并用当前表头代替原表头.(出现几个-1就会有几个表头.)
3.重复2.
zhanghuayi_xiyou
2009-03-31
打赏
举报
回复
先制定一个空闲链表(可以看作一维),里面的元素表示还能链接新数,例如:1->3->5->90->?链表的元素就是90,如果还有一个,2->4->5->?,下一个链表元素就是5...以此类推。
链表元素结构定义如下:
typedef struct free_link_num_t
{
int link_num; //如上面的例子,值为90,5等等
int save_table_pos; //表示save表中的位置,save表说明在下面
struct free_link_num_t *pnext;
}free_link_num_t;
空闲链表特点是没有一个link_num相同的。相同时就要更新(下一个数不为-1)或是删除(下一个数为-1)
save表(可以看作二维),结构定义如下;
typedef struct data_t
{
int num;
struct data_t *pnext;
}data_t;
typedef struct free_link_num_t
{
int first_num; //如上面的例子,1,2...表示
data_t *pnext_data;
struct free_link_num_t *pnext;
}fln_t;
来新数据时先检查空闲链表,如果没有匹配的数,就在SAVE表中添加,如果有匹配,就利用对应的save_table_pos;找到SAVE表相应的位置(此时遍历的指针为free_link_num_t *pnext),再在相应位置表尾,将data_t添加(此时用到的指针为data_t *pnext_data)
可以根据这两个表进行容错设计。
大王派我去巡山
2009-03-27
打赏
举报
回复
先将所有行按照第一个数的大小排序,排序之后的第一行为链表的起点,然后二分查找链表中的下一个节点,直到出现-1,这条链表结束;
将用过的行删除,在剩下的记录中重复上述过程,直到所有行都被并入链表.
WizardOz
2009-03-27
打赏
举报
回复
要是讲究效率的话可以先针对第二列排个序
WizardOz
2009-03-27
打赏
举报
回复
这个,我觉得可以用很直接的方法来做阿,就是当做3元组读入数组(每一对多加一个是否已读取的标记)。
然后在未读的行中一个一个从后往前找。
就是现比较第二项,为-1的时候开始一个链表,把该行标记为已读
然后接着在未读的第二项中找上一次加入链表的第一项。
直到没有-1为止。
dzc8866
2009-03-27
打赏
举报
回复
mark
要是用户输入N组数据,不知道能生成多少个链表,怎么办?怎么将所有的链表输出来?我是想问程序能不能动态实现自定义链表?
算法入门教程——
链表
循序渐进的讲解
链表
的相关知识。其中通过丰富的例题讲解,加深同学们对
链表
的遍历、节点的插入与删除的知识的理解。
带环相交
链表
问题
带环相交
链表
问题
设计目的:总览效果效果:需求分析概要设计详细设计 设计目的: 掌握
链表
的基本操作。 掌握带环
链表
的相关操作算法。 总览效果效果: 需求分析 1需要带头结点的单
链表
,根据元素值输入对比,修改链域,形成新
链表
。 2快慢指针法或者标记数组两种方法。 3修改链域,恢复单
链表
,根据
链表
长度,遍历
链表
得到
链表
中间节点。 4分四种情况讨论
链表
相交情况。 概要设计 1struct node{数据域;链域;标记位;} 2void makecircle(double x,double y)//输入元素
数据结构实验--带环、相交
链表
问题
一、
问题
描述: 基于课程上机关于单
链表
的作业,要求进一步实现以下需求: 1.构造
链表
后,将元素值为 m 和 n(从键盘输入,如有多个相同元素值,仅考虑首个出现的元素)的节点建立连接,注意判断节点出现的先后关系,将后面出现的节点(假设为 n)的链域连到先出现的节点(假设为 m),将原 n 节点的后续节点搬迁到原单
链表
的头部,形成以下双头相交
链表
(如果使用带头结点的
链表
,搬迁过程中请自行额外增加一个头节点); 2.利用课程 ppt 中关于判断
链表
是否有环的方法,判断
链表
是否有环路,并求出环路出现的 位置,即
leetcode
链表
问题
总结
最近一周下班时间在做leetcode上xi
HashMap的循环
链表
图解
HashMap的循环
链表
图解 @author:Jingdai @date:2021.03.20 复习HashMap的知识点,总是看到jdk1.7前在多线程操作时可能会出现循环
链表
问题
,不是很理解,于是研究源码并画图终于搞懂,记录一下。 由于本人电脑只有jdk1.5和jdk1.8,所以以下分析均基于jdk1.5,jdk1.7应该一样。 循环
链表
发生的地方 循环
链表
发生在多个线程同时对HashMap进行put操作使HashMap 扩容的时候。下面看代码。 public V put(K key, V valu
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章