3

文字列 "Lamps" があるとします。これはプログラムに渡され、各文字はリンク リストのノードに格納されます。

別のリンクされたリストを使用してそのリストを逆順にコピーする必要があります。これを行うにはどうすればよいですか?

リンクされたリストを後方に移動するためにそこに置く必要があるものについてコメントされた行が表示されます。

#include <stdlib.h>
#include <stdio.h>

struct NODE {
    struct NODE *next;  
    char data;

};


int main(int argc, char *argv[]) {

int i;

struct NODE *head;
struct NODE *current;
struct NODE *head2;
struct NODE *current2;
struct NODE *finger;


for(i = 0; i < argc; i++)
    printf("arg %d: %s\n", i, argv[i]);

head = (struct NODE*)malloc(sizeof(struct NODE));
    current = head;


    for ( i = 0; i < sizeof(argv[1]) - 1; i++ ) {

    current -> data = argv[1][i];
    current -> next = (struct node*)malloc(sizeof(struct NODE));
    current = current -> next;
    current -> next = NULL;

}


head2 = (struct NODE*)malloc(sizeof(struct NODE));
    current2 = head2;

    while ( current != head) {

        finger = head;


    while (finger -> next != current) 

        finger = finger -> next;
        current2 -> data = current -> data;
        current2 -> next = (struct node*)malloc(sizeof(struct NODE));
        current2 = current2 -> next;    
        // move backwards



    } // ends loop



}






return 0;

}
4

2 に答える 2

5

(単独で) リンクされたリストを逆方向に移動するにはどうすればよいですか?

あなたはそうしない。あるリストを別のリストに反転させる秘訣は、ターゲット リストの最後ではなく先頭に挿入することです。ポインターをたどって元のリストを通常の方法でトラバースする必要がありますnextが、ターゲット リストの末尾に要素を追加するのではなく、新しいノードを作成し、ターゲットのヘッダーをそれで置き換えます。

以下は、段階的な図です。

sourceHead -> "A" -> "B" -> "C" -> NULL
your pointer   ^
targetHead -> NULL

sourceHead -> "A" -> "B" -> "C" -> NULL
your pointer          ^
targetHead -> "A" -> NULL

sourceHead -> "A" -> "B" -> "C" -> NULL
your pointer                 ^
targetHead -> "B" -> "A" -> NULL

sourceHead -> "A" -> "B" -> "C" -> NULL
your pointer                        ^
targetHead -> "C" -> "B" -> "A" -> NULL
于 2013-02-28T23:00:49.053 に答える
2

短いバージョンは、構造体を prev 変数で拡張することです。子を作成するときに、self をその Parent 変数に割り当てます。したがって、後で、子からその親変数を読み取って 1 つ後ろに移動し、再帰してすべてを取得できます。トップへの道。

于 2013-02-28T23:00:37.937 に答える