链表(先进后出)

简介:

链表是一个线性表,能够

在常数时间内实现元素的插入和删除, 我们引入 链表 这种数据结构

分类 描述
单向链表 每一个节点包含了数据块和指向下一个节点的指针
双向链表 每一个节点包含了数据块和指向下一个节点的指针以及指向前一个节点的指针

常用操作:

操作 描述
查找(.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 
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<

你可能感兴趣的:(链表,数据结构,java)