2

ほぼ 3 年後、私は再学習を開始しましたC

を作成しましたLinked list。これを拡張して、並べ替えられたリンク リストを作成したいと考えています。これが私のコードです:

typedef struct node{
int data;
struct node *ptr;
}node;

node* insert(node* head, int num){
node *temp,*prev,*next;
temp = (node*)malloc(sizeof(node));
temp->data = num;
temp->ptr = '\0';
if(head=='\0'){
    head=temp;
}else{
    next = head;
    prev = next;
    while(next->data<=num){
        prev = next;
        next = next->ptr;
    }
    if(next==NULL){
        prev->ptr = temp;
    }else{
        temp->ptr = prev->ptr;
        prev-> ptr = temp;
    }

}
return head;
}

void main(){
int num;
node *head, *p;
head = '\0';
do{
    printf("Enter a number");
    scanf("%d",&num);
    if(num!=0)
        head = insert(head,num);
}while(num!=0);
p = head;
printf("\nThe numbers are:\n");
while(p!='\0'){
    printf("%d ",p->data);
    p = p->ptr;
}
}

これが私の考えです。入力の数字が見つかるまで、リストをトラバースし>=ます。前のノードを格納しprevnextノードには現在の値が含まれています。next がnullの場合、リストは終了し、番号はリストの中で最大であるため、最後の場所に挿入されます。番号が途中の場合は、前のノードのアドレス部分が一時ノード アドレスに格納されます。 part now 一時ノード ポインタは、次のノードのアドレスを保持します。

編集:私のコードの問題は、1,2と入力するとエラーメッセージが表示されることa.exe has stopped workingです。コンパイルには MinGW を使用しています。ユーザーが 0 を入力すると、ループが中断されます。

4

1 に答える 1