【问题标题】:Given last node of singly linked list, how do we find head node给定单链表的最后一个节点,我们如何找到头节点
【发布时间】:2018-09-29 01:48:16
【问题描述】:

给定单链表的最后一个节点,我们如何找到头节点?

假设给定 JSON:

{ “id”:“A”, “下一个”:“B” }, { “id”:“B”, “下一个”:“C” } { “id”:“C”, “下一个”:“D” } { “id”:“D”, “下一个”:空 }

现在假设上面没有排序,我们需要找出 HEAD 元素'A'。

【问题讨论】:

    标签: linked-list singly-linked-list


    【解决方案1】:

    您可以使用Array.prototype.find 来查找id 不是列表中另一个对象的值next 的元素。假设一个有效的非空单链表必须恰好有一个元素满足该条件(头部)。如果列表为空,head 将被赋值为 undefined

    const json = '[{"id": "A", "next": "B"}, {"id": "B", "next": "C"},{"id": "C", "next": "D"},{"id": "D", "next": null}]';
    const objects = JSON.parse(json);
    
    const head = objects.find( a => ! objects.find( b => a.id === b.next ) );
    
    console.log( head );

    【讨论】:

    • 一旦我发布了这篇文章,甚至我也认为头节点不会出现在任何下一个属性中。感谢您的快速回答。
    • @Paulpro ! 是如何工作的?为什么使用objects.forEach(...); 不起作用?我在Array.prototype.find 中找不到任何关于它的信息。
    • @DavidMichaelHuber 这只是logical not operator。如果内部find 返回并且对象比! 将评估为false,否则将评估为true
    • @Paulpro 出于某种原因,这让我感到困惑。您确定它真的检查唯一的元素id 不是列表中另一个对象的值next?对我来说,它似乎只检查第一个元素是否在列表的任何对象中都没有 id 作为 next
    • @DavidMichaelHuber 你说得对,这就是为什么我的回答以“假设一个有效列表”开头的原因。我可能应该将其扩展为“假设一个有效的单链表”。这样的元素只能有一个,并且必须有一个,所以第一个满足条件的元素与唯一满足条件的元素相同。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多