将近 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
,则列表结束并且列表中的数字是最高的,因此将其插入到最后一个位置,如果数字在中间的某个位置,则上一个节点的地址部分存储在临时节点地址中现在部分临时节点指针保存下一个节点的地址。
编辑:我的代码的问题是,如果我输入 1,2,我会收到错误消息a.exe has stopped working
。我正在使用 MinGW 进行编译。当用户输入 0 时,我正在打破循环。