1

Possible Duplicate:
Reverse every k nodes of a linked list

Say the linked list is <1,3,6,4,8,9,0,2>. Calling reversek(3) would result in <6,3,1,9,8,4,2,0>. I have written the reverse function which may be used as a helper function in reversek. Here's my reverse function which reverses from a given starting point to a given ending point:

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

I'm confused about how to implement reversek, any help is appreciated.

4

1 に答える 1

0

次のようなものを試してください -

  1. リンクされたリストのヘッド要素への 2 つのポインター (P1、P2) があります。
  2. 1 つは、リスト (P1) をトラバースするために使用されます。もう一方 (P2) は、トラバース ポイントがリストの 3 番目のノードに到達すると、要素を交換するために使用されます。
  3. 両方のポインターを 4 番目のノードに移動します。そして再び P1 を続けて、リストの残りをトラバースします。

ここでは、3 番目のノードごとに P1 がいつ到達したかを追跡する必要があります。ここでは例として 3 ですが、関数の引数によって異なります。

于 2012-09-26T22:30:36.873 に答える