以下文章来源于小K算法 ,作者小K算法
小K算法 .
曾就职华为和美团,中山大学数学与计算机系本科,专注分享数学、算法、科学等硬核知识
来自公众号:小K算法
struct LinkNode {
int data;
LinkNode *next;
};
LinkNode *head, *tail;
从头插入:先新建一个结点,将新结点指向头结点,再将头指针指向新结点。
void insertFromHead(int x) {
LinkNode *node = new LinkNode{x};
if (head == nullptr) {
head = node;
tail = node;
} else {
node->next = head;
head = node;
}
}
void insertFromTail(int x) {
LinkNode *node = new LinkNode{x};
if (head == nullptr) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
void deleteNode(LinkNode **head, int x) {
LinkNode *pre;
// 如果头结点是要删除的结点
pre = *head;
if ((*head)->data == x) {
(*head) = (*head)->next;
delete pre;
return;
}
// 寻找要删除的结点
while (pre->next != nullptr && pre->next->data != x) {
pre = pre->next;
}
// 如果找到,则删除结点
LinkNode *current;
if (pre->next != nullptr) {
current = pre->next;
pre->next = pre->next->next;
delete current;
}
}
void printLink(LinkNode *head) {
while (head != nullptr) {
cout << head->data << endl;
head = head->next;
}
}
数组和链表都各有优缺点,互补。那有没有更完美的数据结构呢,既有数组的快速访问效率,又有链表的快速增减效率?那肯定是有的,有需求就有市场,用数组加链表组合起来,这不就是满大街都在用的hashmap了吗,欲知hashmap详情,即听下文分解。
文章首发平台:微信公众号【小K算法】。
网友评论已有0条评论, 我也要评论