简介:
链表是一个线性表,能够
在常数时间内实现元素的插入和删除, 我们引入 链表 这种数据结构
| 分类 | 描述 |
|---|---|
| 单向链表 | 每一个节点包含了数据块和指向下一个节点的指针 |
| 双向链表 | 每一个节点包含了数据块和指向下一个节点的指针以及指向前一个节点的指针 |
常用操作:
| 操作 | 描述 |
|---|---|
| 查找(.find(x)) | 找到符合条件的节点 |
| 插入(->) | -添加一个新节点 |
| 删除(delete) | 删除一个存在的节点 |
合并数字
已完成
1-n,共n个数字,初始时每个数都是独立的算作1个串,之后会进行n-1次合并,每次合并操作,会把一个串放到另一个串的后面。
合并时会给出2个数字,x y,表示将以y为开头的串放到x为开头的串的后面。例如:
1 3 (3放到1后面,=> (1 3), 2, 4 )
2 4 (4放到2后面,=> (1 3), (2 4))
1 2 (2放到1后面,=> (1 3 2 4))
在n - 1次合并后,按顺序输出最终剩下的这个串的全部数字。
输入格式
第1行:1个数n(2 <= n <= 10000) 后面n - 1行,每行2个数x y,对应n - 1次合并操作,把以y为开头的串放到以x为开头的串的末尾。
输出格式
输出共n行,每行1个数,对应最终串包含的n个数字。
输入样例
4
1 3
2 4
1 2
输出样例
1
3
2
4
解法:
#include <bits/stdc++.h>
using namespace std;
struct node{
int data,next;
}a[100005];
int n,m,x,y,p,q;
int head;
int main(){
cin>>n;
for(int i=1;i<=n-1;i++){
cin>>x>>y;
while(a[x].next){
x=a[x].next;
}
a[x].next=y;
a[y].data=x;
}
for(int j=1;j<=n;j++){
if(a[j].data==0){
head=j;
break;
}
}
for(int k=head;k!=0;k=a[k].next){
cout<<k<<endl;
}
}
本文介绍了一种基于链表的数据结构及其操作方法,并详细解析了一个特定的链表合并算法。该算法通过n-1次合并操作,将独立的数字序列逐步连接成一个完整的链表。文章还提供了一个C++实现示例。
7201

被折叠的 条评论
为什么被折叠?



