面试遇到的问题,一开始面试官是问我有什么方案可以实现排行榜,当时给出了两个方案。后面面试官又在我的其中一种方案上让我手写代码实现排序双线链表的插入,根据score值插入,并且链表长度限制在100。
需要考虑的点:1)插入在链表表头的;2)插入到链表表尾;3)插入到链表中间;4)需要在遍历整个链表的时候统计链表的长度;5)如果长度刚好在100而插入刚好在末尾,则此时不需要执行插入操作。完整代码如下
#include <iostream>
using namespace std;
#define MAX_RANK 100
struct Link {
int score;
int uid;
Link* prev;
Link* next;
Link() {
score = 0;
uid = 0;
prev = NULL;
next = NULL;
}
};
Link* initLink(int n) {
if (n <= 0) {
return NULL;
}
int i = n;
Link *head = new Link;
head->score = i * 2;
Link *node = head;
while (i > 1) {
i--;
node->next = new Link;
node->next->score = i * 2;
node->next->prev = node;
node = node->next;
}
return head;
}
void freeLink(Link *L) {
Link *node = NULL;
while (L) {