HJ8 题解 | #合并表记录# 单链表o(n)解法

合并表记录

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

#include<iostream>
using namespace std;

typedef struct sheet {   //定义链表结点
    int index;
    int value;
    struct sheet* next;
} recSheet, *rS;

int main() {
    int n = 0; // 键值对数量
    recSheet* p = nullptr; // 遍历指针
    recSheet* q = nullptr; // 遍历指针
    rS L = nullptr; // 创建recSheet表
    L = new recSheet; // 创建头节点
    L->index = -1;
    L->value = -1;
    L->next = nullptr;
    cin >> n;
    while (n > 0) {
        recSheet* s = new (recSheet);
        cin >> s->index;
        cin >> s->value;
        p = L->next;
        q = L;
        while (q) { //q初始指向头节点,肯定不为空
            if (p != NULL && p->index == s->index) {  //p可能为空,条件顺序不能错
                p->value += s->value;
                 delete s; //结点不需要插入链表,释放结点空间
                break;
            }


            if (p == NULL || (p->index > s->index)) {  //p可能为空,条件顺序不能错
                s->next = p;
                q->next = s;
                break;
            }

            q = p;
            p = p->next;
        }
        n--;
    }
    p = L->next;
    while (p) {
        cout << p->index << ' ' << p->value << endl;
        p = p->next;
    }
    delete L;  //释放链表空间
    return 0;
}

华为机试刷题实录 文章被收录于专栏

记录一下本科应届生(我自己)刷华为机试题的过程

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务