C 链表(排序插入)

C 链表(排序插入),c,list,printing,linked-list,C,List,Printing,Linked List,该程序创建一个排序列表,然后插入一个元素,使列表仍然保持排序。我认为逻辑是正确的。但是程序不会打印新形成的列表。这是代码。怎么了 #include<stdio.h> #include<malloc.h> #include<stdlib.h> struct list { int number; struct list *next; }; typedef struct list node; void create(n

该程序创建一个排序列表,然后插入一个元素,使列表仍然保持排序。我认为逻辑是正确的。但是程序不会打印新形成的列表。这是代码。怎么了

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct list {
        int number;
        struct list *next;
        };
typedef struct list node;
void create(node *);
void print(node *);
void sortedInsert(node **);
main() {
int user_response;
node *head;
head = (node *)malloc(sizeof(node));
create(head);
printf("Look at your creation!! A linked list!!1 heheheh...........\n");
print(head);
printf("Do you want to experience some \"sort\" of thrill?\n1 for yes..\n");
scanf("%d",&user_response);
if(user_response == 1) {
        sortedInsert(&head);
        printf("Look at the marvel of linked list...\n");
        print(head);
}
else {
        printf("Ha\n tired fellow,lack of ambition!!!\n");
        exit(0);
}
return 0;
}
void create(node *head) {
        printf("Enter a number,-999 to stop\n");
        scanf("%d",&head->number);
        if(head->number == -999) {
                head->next = NULL;
        }
        else {
                head->next = (node *)malloc(sizeof(node));
                create(head->next);
    }
}
void print(node *head) {
        if(head->next != NULL) {
                printf("%d-->",head->number);
                print(head->next);
        }
        else {
                printf("%d",head->number);
        }
}

void sortedInsert(node **headRef) {
        node *new_node;
        node *prev_ptr = *headRef;
        node *dummy_ptr = *headRef;
        int key;
        printf("Which value do you wanna insert\n");
        scanf("%d",&key);
        new_node = (node *)malloc(sizeof(node));
        new_node->number = key;
        while((*headRef)->next != NULL) {
                if((*headRef)->number >= key) {
                        prev_ptr->next = new_node;
                        new_node->next = *headRef;
                        *headRef = dummy_ptr;
                }
                else {
                        prev_ptr = *headRef;
                        *headRef = (*headRef)->next;
                }
}
#包括
#包括
#包括
结构列表{
整数;
结构列表*下一步;
};
typedef结构列表节点;
创建空(节点*);
作废打印(节点*);
空位分拣机(节点**);
main(){
int用户响应;
节点*头;
头=(节点*)malloc(节点大小);
创建(头);
printf(“看看你的作品!!一个链表!!1嘿嘿……。\n”);
打印头;
printf(“你想体验某种刺激吗?\n1是的..\n”);
scanf(“%d”和用户响应);
if(用户响应==1){
分拣机和机头;
printf(“看看链表的奇迹…\n”);
打印头;
}
否则{
printf(“疲倦的家伙,缺乏雄心壮志!!!\n”);
出口(0);
}
返回0;
}
创建空(节点*头){
printf(“输入一个数字,-999停止\n”);
scanf(“%d”,&head->number);
如果(标题->编号==-999){
head->next=NULL;
}
否则{
head->next=(节点*)malloc(节点大小);
创建(头部->下一步);
}
}
无效打印(节点*头){
如果(头部->下一步!=NULL){
printf(“%d-->”,表头->编号);
打印(打印头->下一步);
}
否则{
printf(“%d”,标题->编号);
}
}
空区分拣机(节点**headRef){
节点*新节点;
节点*prev_ptr=*headRef;
节点*dummy_ptr=*headRef;
int键;
printf(“要插入哪个值\n”);
scanf(“%d”和键)(&key);
new_node=(node*)malloc(sizeof(node));
新建节点->编号=键;
while((*headRef)->next!=NULL){
如果((*headRef)->数字>=键){
prev_ptr->next=新建_节点;
新建节点->下一步=*headRef;
*headRef=假人ptr;
}
否则{
prev_ptr=*头EF;
*headRef=(*headRef)->next;
}
}

oh crap..wait..while循环中的if永远不会执行。好了,while循环中的if语句应该有一个中断,否则我们将永远无法确定大于键的节点值的第一个实例。您可能会发现更容易理解。在调试器中查看它,看看它是如何运行的rks,但如果您理解指向指针的指针,这应该是显而易见的。