【问题标题】:How to reverse every k element of a linked list? [duplicate]如何反转链表的每个 k 元素? [复制]
【发布时间】:2012-09-26 22:23:29
【问题描述】:

可能重复:
Reverse every k nodes of a linked list

假设链表是。调用 reversek(3) 将导致 。我已经编写了可以用作reversek 中的辅助函数的reverse 函数。这是我的反向函数,它从给定的起点反转到给定的终点:

    void List::reverse(Node * & start, Node * & end)
    {
    Node *pter = start;
    while (pter != NULL) 
    {
         Node *tmp = pter->next;
         pter->next = pter->prev;
         pter->prev = tmp;
         if (tmp == NULL) 
         {
            endPoint = startPoint;
            startPoint = pter;
         }
       pter = tmp;
    }

我对如何实现反向操作感到困惑,感谢任何帮助。

【问题讨论】:

  • 为什么在您的示例中交换了最后 2 个节点值?
  • 最后,起始指针必须指向新的数组头部
  • piotrnycz,这不是我的帖子,完全不同。
  • @SKLAK 你的例子不应该是6,3,1,9,8,4,0,2吗?
  • @Mahesh,不,即使是最后两个元素也必须颠倒。

标签: c++ reverse doubly-linked-list


【解决方案1】:

尝试类似 -

  1. 有 2 个指向链表头元素的指针(P1、P2)。
  2. 一个用于遍历列表(P1)。而 other(P2) 用于在遍历点到达列表中的第三个节点时交换元素。
  3. 现在将两个指针移至第 4 个节点。再次继续 P1 遍历列表的其余部分。

在这里,您必须跟踪 P1 到达每个第 3 个节点的时间。这里以 3 为例,但它取决于函数参数。

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多