|
分類:[C#]
線形リストのプログラムで、入力した数字が出力時逆になる(1の部分)ところを、 再度反転させて、入力と同じ順序で出力(2の部分)できるようにしたいです。
例:入力 9876 出力 6789 (1 9876 (2
下のプログラムですが(2)の部分の実行結果がうまくでません。 教科書に反転する関数があったのでその関数を使用しているのですが、 自分でも(2)のfor文の中身をどのようにすればよいかわからなかったのでアドバイスお願いします。
#include <stdio.h> #include <stdlib.h> typedef struct node *link; struct node { int item; link next; };
link reverse();
link reverse(link x){ link t, y= x, r= NULL; while( y!=NULL ){ t= y->next; y->next= r; r= y; y= t; } return r; }
int main(int argc, char *argv[]){ int i, j; link p, head= NULL; for(i= 1; i!=argc; i++){ link p; p= (link)malloc(sizeof(struct node)); p->item= atoi(argv[i]); p->next= head; head= p; } for(p= head; p!=NULL; p= p->next){ //1 printf("%d ", p->item); } printf("\n"); for(p= head; p!=NULL; p= p->next){ //2 p = reverse(head); printf("%d ", p->item); } }
|