Transformaton98 2019-12-23 21:53 采纳率: 100%
浏览 183
已采纳

小白提问-关于单链表的插入-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;   
}


  • 写回答

1条回答 默认 最新

  • threenewbee 2019-12-24 00:55
    关注

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

    // 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;   
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题