链接列表分区值澄清

时间:2017-08-24 18:33:33

标签: c++ linked-list

我一直在练习不同的面试问题,而且我遇到了一个问题,当我手动执行代码时,我似乎无法解决这个问题。

问题是编写一个函数,该函数将值x周围的链表分区,使得小于x的所有节点都在所有节点大于或等于x之前。

[3,5,8,5,10,2,1]其中x = 5

应该输出如下内容:[1,2,3,5,8,5,10](输出可能因实现而异)。

以下是解决方案:

LinkedListNode* partition(LinkedListNode* node, int x)
{
    LinkedListNode* head = node;
    LinkedListNode* tail = node;

    while (node)
    {
         LinkedListNode* next = node->next;
         if (node->data < x)
         {
             node->next = head;
             head = node;
         } else {
             tail->next = node;
             tail = node;
         }
         node = next;
     }
     tail->next = nullptr;
     return head;
}

我知道解决方案有效,当在上面的链表上运行时,我得到以下输出:[1,2,3,5,8,5,10]

当我手动操作时,我感到困惑。首次遍历链接列表时,nodeheadtail都指向值为3的节点。现在我们在if中言。

我们将node->next设置为head,现在指向自身(具有node-&gt; data = 3的那个)!在遍历整个列表之后,该节点的下一个字段总是指向它自己。

显然,这个功能正在按预期工作,但我必须踩错它。任何洞察我忽略的东西??

谢谢!

编辑:澄清

0 个答案:

没有答案