数字を含むリンクされたリストを回転したいと思います。 123は231に回転する必要があります。関数は23を作成しましたが、最後の文字は空のままです。なぜですか?リンクされたリストを回転する
typedef struct node node;
struct node{
char digit;
node* p;
};
void rotate(node** head){
node* walk= (*head);
node* prev= (*head);
char temp= walk->digit;
while(walk->p!=NULL){
walk->digit=walk->p->digit;
walk= walk->p;
}
walk->digit=temp;
}
私はリストを作成する方法:
node* convert_to_list(int num){
node * curr, * head;
int i=0,length=0;
char *arr=NULL;
head = NULL;
length =(int) log10(((double) num))+1;
arr =(char*) malloc((length)*sizeof(char)); //allocate memory
sprintf (arr, "%d" ,num); //(num, buf, 10);
for(i=length;i>=0;i--) {
curr = (node *)malloc(sizeof(node));
(curr)->digit = arr[i];
(curr)->p = head;
head = curr;
}
curr = head;
return curr;
}
あなたの回転コードは、エクササイズに必要と思われるリストを再リンクするのではなく、数字を動かしているようです。同等のソリューションにはいくつかの印が付いていますが、実証するはずの技術ではないでしょう。 –
もう一つのバイトを割り当てる必要があります - あなたの 'sprintf()'は、割り当てられたスペースを超えたトラムです。番号123の長さは3です。ヌルターミネータにも割り当てる必要があります。 'malloc()'はおそらく少なくとも8バイトの倍数を割り当てるため、今度はそれを取り除きますが、それは悪い習慣であり、十分なスペースを割り当てなければ、あなたは早くからやってしまうでしょう。 –
しかし、私は新しいノードへのポインタを返すことができるはずです。回転プロトタイプはこのようにしなければなりません。 – user408041