2012-09-26 53 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,但它取決於函數參數。