您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。

扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。

示例:

输入:
1---2---3---4---5---6--NULL
|
7---8---9---10--NULL
|
11--12--NULL 输出:
1-2-3-7-8-11-12-9-10-4-5-6-NULL

以上示例的说明:

给出以下多级双向链表:

我们应该返回如下所示的扁平双向链表:


//章节 - 链表
//四、小结
//3.扁平化多级双向链表
/*
算法思想:
题意较复杂,先读懂题意,可以看出如果某个结点有下一层双向链表,那么下一层双向链表中的结点就要先加入进去,如果下一层链表中某个结点还有下一层,那么还是优先加入下一层的结点,整个加入的机制是DFS的,就是有岔路先走岔路,走到没路了后再返回,这就是深度优先遍历的机制。
采用迭代,迭代的写法与递归是反过来的,先把第二层加入第一层,此时第二层底下可能还有很多层,不必理会,之后等遍历到的时候,再一层一层的加入第一层中,最终都可以压平。
*/
//算法实现:
/*
// Definition for a Node.
class Node {
public:
int val = NULL;
Node* prev = NULL;
Node* next = NULL;
Node* child = NULL; Node() {} Node(int _val, Node* _prev, Node* _next, Node* _child) {
val = _val;
prev = _prev;
next = _next;
child = _child;
}
};
*/
class Solution {
public:
Node* flatten(Node* head) {
Node *cur = head;
while (cur) {
if (cur->child) { //如果有孩子,既有下一层
Node *next = cur->next; //保存断开点
Node *last = cur->child; //进入下一层
while (last->next)
last = last->next;
cur->next = cur->child;
cur->next->prev = cur;
cur->child = NULL;
last->next = next;
if (next)
next->prev = last;
}
cur = cur->next;
}
return head;
}
};

最新文章

  1. [field:picname/]和[field:litpic/]区别
  2. linux 添加基于weblogic的nodemanager的服务
  3. 黄聪:C#Winform程序如何发布并自动升级(图解)
  4. 使用Eclipse上传/下载Git项目
  5. python chinese code
  6. Python if条件语句
  7. 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
  8. MemoryMappingFile泄漏分析过程
  9. W5500问题集锦(二)
  10. Torch vs Theano
  11. HTML Imports
  12. 利用css新属性appearance优化select下拉框
  13. 一键保存网页为PDF
  14. c# 简单实现 插件模型 反射方式
  15. Coins HDU - 2844
  16. api-gateway实践(01)服务网关 - 原型功能
  17. Java-Maven(八):IDEA使用本地maven,并配置远程中央仓库
  18. Windows下Kettle定时任务执行并发送错误信息邮件
  19. Intersecting Lines
  20. Git客户端的安装与配置入门

热门文章

  1. 如何建一个SAM
  2. apache重写URL时,排除静态资源
  3. Day5 - 03 函数的参数-位置参数和默认参数
  4. Servlet中的装饰者模式
  5. 2020-2021-1 20209307《Linux内核原理与分析》第一周作业
  6. html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
  7. 正方形和球体,利用蒙特卡洛计算pi值
  8. sqlserver varchar和Nvarchar区别
  9. 【命令】pstree命令
  10. java中对list集合中的数据按照某一个属性进行分组