题解 | #合并表记录#单向链接插入时排序

合并表记录

https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
    int index;
    int value;
    struct Node* next;
} NodeLink;

NodeLink* init_node(int index, int value)
{
    NodeLink *p = (NodeLink *)malloc(sizeof(NodeLink));
    p->index = index;
    p->value = value;
    p->next = NULL;
    return p;
}

NodeLink* insert_and_sort(NodeLink *head, int index, int value)
{
    NodeLink *cur = head;
    NodeLink *pre = head;
    
    if (head == NULL) {
        head = init_node(index, value);
        head->next = NULL;
        return head;
    }

    while (cur) {
        if (index == cur->index) {
            cur->value += value;
            return head;
        } else if (index < cur->index) {
            NodeLink* p = init_node(index, value);
            p->next = cur;
            if (cur != head) {
                pre->next = p;
            } else {
                head = p;
            }
            return head;
        } else {
            if (cur->next == NULL) {
                NodeLink* p = init_node(index, value);
                cur->next = p;
                return head;
            } else {
                pre = cur;
                cur = cur->next;
            }
        }
    }
    return head;
}

void free_link(NodeLink *head)
{
    NodeLink *cur = head;
    while (cur) {
        NodeLink *tmp = cur;
        cur = cur->next;
        free(tmp);
    }
}

void show_link(NodeLink *head)
{
    NodeLink *cur = head;
    while (cur) {
        printf("%d %d\n", cur->index, cur->value);
        cur = cur->next;
    }
}

int main() {
    NodeLink *head = NULL;
    int key, value;
    int max = 0;
    scanf("%d", &max);

    while (scanf("%d %d", &key, &value) != EOF) {
        head = insert_and_sort(head, key, value);
    }

    show_link(head);
    free_link(head);
    return 0;
}

全部评论

相关推荐

和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务