d4rkjy05un 2021-12-09 14:27 采纳率: 100%
浏览 57
已结题

关于c语言数据合并和排列的问题

下面是我的code,就是能够合并两个list并排序的。(例如:list1=5 4 3 2; list2=7 3 2 1的话,就会合并成7 5 4 3 3 2 2 1)我编好了合并的那一部分,排列那一部分我问了外网,外网人给了点提示,但是我还是不怎么明白,请问有人能帮我填满下面的空档吗?sortlist的while(finish)部分需要填。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
    int data;
    struct node* link;
}NODE;
void addNode(NODE** head, int data) {
    NODE* p = *head;
    NODE* temp = (NODE*)malloc(sizeof(NODE));
    temp->data = data;
    temp->link = NULL;
    if (*head == NULL) {
        *head = temp;
        return;
    }
    while (p->link) p = p->link;
    p->link = temp;
}

void showList(NODE* head) {
    NODE* p = head;
    while (p) {
        printf("%d%s", p->data, p->link ? "->" : "");
        p = p->link;
    }
    printf("\n");
}

NODE* sortList(NODE* X, NODE* Y) {
    int finish = 1;
    NODE* headNode;
    NODE* base; // 大的数
    NODE* challenger; // 小的数
    NODE* preNode;
    if (X->data > Y->data) {
        headNode = X;
        base = X->link;
        challenger = Y;
        preNode = X;
    }
    else {
        headNode = Y;
        base = Y->link;
        challenger = X;
        preNode = Y;
    }
    while (finish) {

        if (challenger->data > base->data) {

        }
        else {

        }

        if (base == NULL) {

        }
        if (challenger == NULL) {

        }
    }
    return headNode;
}

int main() {
    NODE* L1 = NULL;
    NODE* L2 = NULL;
    printf("&head = %p\thead = %p", &L1, L1);
    addNode(&L1, 14);
    printf("&head = %p\thead = %p", &L1, L1);
    addNode(&L1, 10); addNode(&L1, 5); addNode(&L1, 4); addNode(&L1, 1);
    addNode(&L2, 15); addNode(&L2, 10); addNode(&L2, 6); addNode(&L2, 3); addNode(&L2, 1);
    showList(L1);
    showList(L2);
    showList(sortList(L1, L2));
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-12-09 15:55
    关注

    修改如下,供参考:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node {
        int  data;
        struct node* link;
    }NODE;
    void addNode(NODE** head, int data) {
        NODE* p = *head;
        NODE* temp = (NODE*)malloc(sizeof(NODE));
        temp->data = data;
        temp->link = NULL;
        if (*head == NULL) {
            *head = temp;
            return;
        }
        while (p->link) p = p->link;
        p->link = temp;
    }
    void showList(NODE* head) {
        NODE* p = head;
        while (p) {
            printf("%d%s", p->data, p->link ? "->" : "");
            p = p->link;
        }
        printf("\n");
    }
    NODE* sortList(NODE* X, NODE* Y) {
        int   finish = 1;
        NODE* headNode;
        NODE* base; // 大的数
        NODE* challenger; // 小的数
        NODE* preNode;
        if (X->data > Y->data) {
            headNode = X;
            base = X->link;
            challenger = Y;
            preNode = X;
        }
        else {
            headNode = Y;
            base = Y->link;
            challenger = X;
            preNode = Y;
        }
        while (finish) {
            if (base == NULL) {
                preNode->link = challenger;
                break;
            }
            if (challenger == NULL) {
                preNode->link = base;
                break;
            }
            if (challenger->data > base->data) {
                preNode->link = challenger;
                preNode = challenger;
                challenger = challenger->link;
            }
            else {
                preNode->link = base;
                preNode = base;
                base = base->link;
            }
        }
        return headNode;
    }
    int main() 
    {
        NODE* L1 = NULL;
        NODE* L2 = NULL;
        printf("&head = %p\thead = %p\n", &L1, L1);
        addNode(&L1, 14);
        printf("&head = %p\thead = %p\n", &L1, L1);
        addNode(&L1, 10); addNode(&L1, 5);  addNode(&L1, 4); addNode(&L1, 1);
        addNode(&L2, 15); addNode(&L2, 10); addNode(&L2, 6); addNode(&L2, 3); addNode(&L2, 1);
        showList(L1);
        showList(L2);
        showList(sortList(L1, L2));
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 修改了问题 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法