小白提问-关于单链表的插入-C语言

关于单链表的插入问题,尝试了很多次,不清楚问题出在哪,希望大牛能够帮助我指出代码中存在的问题,感激万分。

#include<stdio.h>
#include<stdlib.h>
struct Link
{
    int num;
    struct Link *next;
};

void getInput(struct Link *num)//函数1 读入数据 
{
    printf("input a number: ");
    scanf("%d", &num->num);
}

void rank_num(struct Link **link, struct Link *num)//函数2 排序插入 
{
    struct Link *temp;
    struct Link *current;
    current = *link;
    while(num >= current->num || current->next != NULL)
    {
        if(current->next != NULL)
        {
            temp = current;
            current = current->next;
        }
    }
    if(current->next == NULL)
    {
        current->next = num;
        num->next = NULL;
    }
    else
    {
        temp->next = num;
        num->next = current;
    }
}

void printLink(struct Link *link)//函数3 打印结果 
{
    while(link->next != NULL)
    {
        printf("%d ", link->num);
        link = link->next;
    }
    return;
}

void releaseLink(struct Link **link)//函数4 释放存储空间 
{
    struct Link *temp;
    while(*link != NULL)
    {
        temp = *link;
        *link = (*link)->next;
        free(temp);
    }
}

int main()//主函数 main 
{
    struct Link *link = NULL;
    struct Link *num;
    num = (struct Link*)malloc(sizeof(struct Link));
    for(int i=0; i<3; i++)
    {
        printf("请输入数据\n");
        getInput(num);  
        if(link != NULL)
        {
            rank_num(&link, num);
        }
        else
        {
            link = num;
            num->next = NULL;
        }
    }

    printLink(link);

    releaseLink(&link);
    return 0;   
}


问题如果得到解决请点下'采纳',谢谢

// Q1045564.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include<stdio.h>
#include<stdlib.h>
struct Link
{
    int num;
    struct Link *next;
};

void getInput(struct Link *num)//函数1 读入数据 
{
    printf("input a number: ");
    scanf("%d", &num->num);
}

void rank_num(struct Link **link, struct Link *num)//函数2 排序插入 
{
    if (*link == NULL) { *link = num; return; }
    if (num->num < (*link)->num)
    {
        num->next = *link;
        *link = num;
        return;
    }
    struct Link *temp = *link; 
    struct Link *current = (*link)->next;
    while(current != NULL && num->num >= current->num) 
    { 
        temp = current; 
        current = current->next;
    }
    num->next = temp->next;
    temp->next = num;
}

void printLink(struct Link *link)//函数3 打印结果 
{
    while(link != NULL)
    {
        printf("%d ", link->num);
        link = link->next;
    }
    return;
}

void releaseLink(struct Link **link)//函数4 释放存储空间 
{
    struct Link *temp;
    while(*link != NULL)
    {
        temp = *link;
        *link = (*link)->next;
        free(temp);
    }
}

int main()//主函数 main 
{
    struct Link *link = NULL;
    struct Link *num;
    for(int i=0; i<3; i++)
    {
        printf("请输入数据\n");
        num = (struct Link*)malloc(sizeof(struct Link));
        num->next = NULL;
        getInput(num);
        rank_num(&link, num);
    }

    printLink(link);

    releaseLink(&link);
    return 0;   
}