Data Structure Linked List: Flattening a Linked List
2024-10-21 03:08:07
http://www.geeksforgeeks.org/flattening-a-linked-list/
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <string>
#include <fstream>
#include <map>
#include <set>
using namespace std; struct node {
int data;
node *right;
node *down;
node(int d = ) : data(d), right(NULL), down(NULL) { }
}; struct cmp {
bool operator() (node *a, node *b) {
return a->data > b->data;
}
}; void push(node* &head, int k) {
node *new_node = new node(k);
new_node->down = head;
head = new_node;
} node* flatten(node *&root) {
priority_queue<node*, vector<node*>, cmp> S;
while (root) {
S.push(root);
root = root->right;
}
root = NULL;
node *p;
while (!S.empty()) {
node *top = S.top();
S.pop();
if (!root) {
root = top;
p = top;
}
else {
p->right = top;
p = p->right;
}
if (top->down) S.push(top->down);
}
return root;
} void print(node *head) {
while (head) {
cout << head->data << " ";
head = head->right;
}
} int main() {
node *root = NULL;
push( root, );
push( root, );
push( root, );
push( root, ); push( ( root->right ), );
push( ( root->right ), ); push( ( root->right->right ), );
push( ( root->right->right ), );
push( ( root->right->right ), ); push( ( root->right->right->right ), );
push( ( root->right->right->right ), );
push( ( root->right->right->right ), );
push( ( root->right->right->right ), ); root = flatten(root);
print(root);
return ;
}
最新文章
- 网站就必须用响应式布局吗?MVC视图展现模式之移动布局
- ArcGIS 10.5新功能预览
- Voreen (二) 入点出点计算
- #8.11.16总结#CSS常用样式总结(二)
- JavaScript一些基础技巧和注意事项,你了解这些吗?
- 为什么模板函数的声明和实现都放在.h文件中
- Entity Framework若干个扩展
- android之OptionsMenu
- Bootstrap新手常见问题
- java 缩放函数drawImage理解(个人总结)
- Mysql哪些字段适合建立索引
- HihoCoder1192 简单的树嵌入 dfs、构造
- (C/C++学习笔记) 六. 表达式
- centos:时间同步
- 用Win32 实现进度条
- 将Tp-link无线路由器桥接到Dlink无线路由器上
- html之内容解析
- js的浮点(小数)数+-*/
- Oracle dbms_random随机数包详解
- cdoj1328卿学姐与诡异村庄