链接:https://leetcode-cn.com/explore/learn/card/linked-list/197/conclusion/764/

思路:顺着child结点链接链表前部分,将child后面的部分按顺序链起来,遍历完原链表之后,再将两部分整合。
代码:
/*
// Definition for a Node.
class Node {
public:
int val;
Node* prev;
Node* next;
Node* child;
};
*/
class Solution {
public:
Node* flatten(Node* head) {
if(head==NULL) return NULL;
Node *p=head;
Node *l=NULL;
while(p)
{
if(p->child)
{
Node *n=p;
while(n->next)
{
n=n->next;
}
if(l)
{
n->next=l;
l->prev=n;
}
if(p->next)
{
l=p->next;
l->prev=NULL;
}
p->next=p->child;
p->child->prev=p;
p->child=NULL;
}
if(p->next) p=p->next;
else break;
}
p->next=l;
if(l) {l->prev=p;}
return head;
}
};
其他方法详解:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/solution/bian-ping-hua-duo-ji-shuang-xiang-lian-biao-by-lee/
本文介绍了一种解决LeetCode上多级双向链表展平问题的方法,通过遍历链表并调整child节点,将多级链表转换为单级链表。文章提供了详细的算法思路和C++代码实现。
1490

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



