ほぼ 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;
}
}
これが私の考えです。入力の数字が見つかるまで、リストをトラバースし>=
ます。前のノードを格納しprev
、next
ノードには現在の値が含まれています。next がnull
の場合、リストは終了し、番号はリストの中で最大であるため、最後の場所に挿入されます。番号が途中の場合は、前のノードのアドレス部分が一時ノード アドレスに格納されます。 part now 一時ノード ポインタは、次のノードのアドレスを保持します。
編集:私のコードの問題は、1,2と入力するとエラーメッセージが表示されることa.exe has stopped working
です。コンパイルには MinGW を使用しています。ユーザーが 0 を入力すると、ループが中断されます。