1

可能重复:
反转链表的每 k 个节点

假设链表是 <1,3,6,4,8,9,0,2>。调用 reversek(3) 将导致 <6,3,1,9,8,4,2,0>。我已经编写了可以用作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;
    }

我对如何实现reversek 感到困惑,感谢任何帮助。

4

1 回答 1

0

尝试类似的东西 -

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

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

于 2012-09-26T22:30:36.873 回答