【发布时间】:2014-08-21 07:01:49
【问题描述】:
问题
给定一个链表,其中除了 next 指针之外,每个节点 有一个子指针,它可能指向也可能不指向单独的列表。
给定第一个列表的头部,将列表展平,以便所有 节点出现在单级链表中。
目标。
我们需要以这样一种方式展平列表,以使第一级的所有节点 应该先来,然后 二级节点,以此类推。
上面的列表应该转换成
10->5->12->7->11->4->20->13->17->6->2->16->9->8->3->19- >15
我的方法:
1) Create an empty queue
2) while(Queue is not empty AND head.next!=null AND head.child!=null)
2a) while(head!=null)
if(head.child!=null)
Enqueue(head.child)
newList = head;
head = head.next;
newList = newList.next;
2b)head = deQ();
这种方法正确吗?
【问题讨论】:
-
它是伪代码,但仍然不是
Queue is not empty等价于head.next!=null AND head.child!=null。除此之外,您的方法对我来说似乎是正确的。 -
有一个两指解决方案,无需额外的数据结构即可工作。 (好吧,它需要两个手指,但它们只是节点指针。)我认为这是家庭作业,你更愿意自己解决,对吧?
-
@rici 这不是家庭作业。您或@aa333 能否指出
while的第2 行)中的终止条件? -
@Dubby:好的,添加了解决方案。我确定我已经在 SO 的其他地方为 BFS 提供了相同的算法。还有一个双指深度优先版本,其中子链接用于维护递归堆栈;你可能会喜欢弄清楚。
标签: algorithm linked-list queue pseudocode