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;
}
华为机试刷题实录 文章被收录于专栏
记录一下本科应届生(我自己)刷华为机试题的过程
