原题链接:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/

1、DFS+递归

Node* flatten(Node* head) {next(head);return head;
}Node *child(Node *head){//遍历child方向上的元素,并且将下一层的元素与上一层的元素进行链接Node *last=next(head->child);//返回next方向上最后一个元素if(head->next==NULL){//将下一层的元素和上一层进行链接last->next=NULL;}else{last->next=head->next;head->next->prev=last;}head->next=head->child;head->child->prev=head;head->child=NULL;return last;
}Node *next(Node *head){//遍历next方向上的元素,返回next方向最后一个元素while(head!=NULL){if(head->child!=NULL){head=child(head);}else{if(head->next!=NULL){head=head->next;}else{return head;}}}return head;
}

2、左右子树版+DFS+递归

Node* flatten(Node* head) {if(head==NULL) return head;Node *dummy=new Node;//哑节点dummy->next=head;flattenDfs(dummy,head);dummy->next->prev=NULL;//使head的prev为空return dummy->next;
}Node *flattenDfs(Node *pre,Node *head){//pre是head前一个节点if(head==NULL) return pre;pre->next=head;//链接pre和headhead->prev=pre;Node *tmp=head->next;//保存head的下个节点,可以看成右子树Node *tail=flattenDfs(head,head->child);//进入左子树,并且返回最后一个元素head->child=NULL;//将head的chlid置空return flattenDfs(tail,tmp);//进入右子树
}

3、左右子树版+DFS+迭代

Node* flatten(Node* head) {if(head==NULL) return head;Node *dummy=new Node;Node *curr,*prev=dummy;stack<Node*> s;s.push(head);//头结点压栈while(!s.empty()){curr=s.top();s.pop();prev->next=curr;//建立prev与curr之间的双向链接curr->prev=prev;if(curr->next!=NULL) s.push(curr->next);//如果存在右指针,压栈if(curr->child!=NULL){//如果存在左指针,压栈s.push(curr->child);curr->child=NULL;//并且删除child指针}prev=curr;} dummy->next->prev=NULL;return dummy->next;
}

leetcode算法题--扁平化多级双向链表★相关推荐

  1. leetcode算法题--扁平化嵌套列表迭代器

    题目链接:https://leetcode-cn.com/problems/flatten-nested-list-iterator/ 这个题目不难,就是像树的深度遍历,就是题目有点难理解. /*** ...

  2. 430. 扁平化多级双向链表

    430. 扁平化多级双向链表 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表.这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构 ...

  3. LeetCode 430. 扁平化多级双向链表(DFS)

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

  4. 【数据结构与算法】之深入解析“扁平化多级双向链表”的求解思路与算法示例

    一.题目要求 你会得到一个双链表,其中包含的节点有一个下一个指针.一个前一个指针和一个额外的子指针,这个子指针可能指向一个单独的双向链表,也包含这些特殊的节点.这些子列表可以有一个或多个自己的子列表, ...

  5. 430. Flatten a Multilevel Doubly Linked List | 430. 扁平化多级双向链表(DFS)

    题目 https://leetcode.com/problems/flatten-a-multilevel-doubly-linked-list/ 题解 思路不难,DFS. 指针操作比较坑,注意边界以 ...

  6. leetcode算法题--完全平方数★

    原题链接:https://leetcode-cn.com/problems/perfect-squares/ 相关题目:leetcode算法题–零钱兑换 1.回溯法 就是暴力法,套路就是递归,但是有很 ...

  7. LeetCode算法题-Design LinkedList(Java实现)

    这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...

  8. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  9. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

最新文章

  1. 【转】OpenStack和Docker、ServerLess能不能决定云计算胜负吗?
  2. 面向切面编程-日志切面应用
  3. html 给 ol添加abc,英语abc怎么写
  4. 前端学习(1188):事件绑定
  5. 在Windows系统中下载并安装Docker-desktop
  6. 100 行 Python 代码实现人体肤色检测
  7. 深入理解javascript作用域系列第三篇
  8. 【Arcpy】Arcpy核心
  9. SQL Server 不允许保存更改的解决方法
  10. rms 公式 有效值_RMS,DC,MEAN,RMN到底有什么区别?
  11. 单表(sqlserver不支持)、整库,支持本地和远程备份
  12. 搜狗输入法在别的屏幕
  13. 如何用电脑画平面坐标图_如何画坐标图?
  14. Unity Shader Graph 制作 Fade 淡入淡出效果
  15. Idea关于Module is not backed by gradle的问题
  16. mysql订单迁移es_京东到家订单中心系统mysql到es的转化之路
  17. 【EPS\AI】12款教师节手绘海报矢量模版素材
  18. 调用百度地图API出现 error inflating class com.baidu.mapapi.map.mapview
  19. 忠告,男人、女人各100条
  20. P2P之关资金存管(二)模式

热门文章

  1. python使用符号#表示单行注释-Pyhton中单行和多行注释的使用方法及规范
  2. python在读写文件之前需要创建文件对象-python读取或写入文件
  3. python保留字的基本含义-python 33个保留字是什么意思
  4. mapreduce编程实例python-使用Python实现Hadoop MapReduce程序
  5. python程序设计报告-《Python程序设计》 实验报告.doc
  6. python学多久可以接单-零基础小白多久能学会python
  7. python爬百度翻译-python爬取百度翻译的问题以及解决方案
  8. python单下划线和双下线的区别
  9. 机器学习笔记-线性模型
  10. LA4238 Area of Polycubes(立方体的表面积)