如何反转链表的每个k元素?

时间:2012-09-26 22:23:29

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

  

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

假设链表是< 1,3,6,4,8,9,0,2>。调用reversek(3)将导致< 6,3,1,9,8,4,2,0>。我编写了反向函数,可以在reversek中用作辅助函数。这是我的反向函数,它从给定的起始点反转到给定的结束点:

    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;
    }

我对如何实施reversek感到困惑,任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:0)

尝试类似 -

  1. 有2个指针(P1,P2)到链表头元素。
  2. 一个用于遍历列表(P1)。而另一个(P2)用于在遍历点到达列表中的第3个节点时交换元素。
  3. 现在将指针移动到第4个节点。并再次继续P1遍历列表的其余部分。
  4. 在这里,您必须跟踪P1到达每个第3个节点的时间。例如,它是3,但它取决于函数参数。