2012-09-26 55 views
1

可能重复:
Reverse every k nodes of a linked list如何反转链接列表中的每个k元素?

说链表是< 1,3,6,4,8,9,0,2>。调用reversek(3)将导致< 6,3,1,9,8,4,2,0>。我已经写了reverse函数,可以在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,任何帮助表示赞赏。

+0

为什么最后2点节点的值在您的示例进行交换? – Mahesh

+0

末,开始指针必须在阵列 – SKLAK

+0

piotrnycz的新负责人指出,这不是我的帖子,完全不同。 – SKLAK

回答

0

尝试类似的东西 -

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

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