1 Star 9 Fork 2

Mancuoj/408-ds

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
09.cpp 1.46 KB
一键复制 编辑 原始数据 按行查看 历史
Mancuoj 提交于 3年前 . feat: format files
#include "ds.h"
/**
* 创建一个带有头节点的链表并返回
*/
List9 create_list9(const std::vector<ElemType> &data) {
if (data.empty()) {
return NULL;
}
auto *head = (Node9 *) malloc(sizeof(Node9));
head->link = NULL;
Node9 *p = head;
for (ElemType i: data) {
auto *cur = (Node9 *) malloc(sizeof(Node9));
cur->data = i;
cur->link = NULL;
p->link = cur;
p = cur;
}
return head;
}
/**
* bf(Brute Force),即暴力解
* 首先扫描一次求出链表长度len,然后重新向后扫描len-k个结点即可
*/
int search_k_bf(List9 list, int k) {
int len = 0;
Node9 *p = list->link;
while (p != NULL) {
p = p->link;
len++;
}
if (len < k) {
return 0;
}
int cnt = len - k;
p = list->link;
while (cnt--) {
p = p->link;
}
printf("%d\n", p->data);
return 1;
}
/**
* 最优解不一定是真正的最优,只是符合评判标准中的满分
* 双指针,一指针先走k步,然后双指针同步走,直到前者走到终点,后一指针所在位置即倒数第k个结点
*/
int search_k(List9 list, int k) {
Node9 *p1 = list->link, *p2 = list->link;
int cnt = 0;
while (p1 != NULL) {
if (cnt < k) {
cnt++;
} else {
p2 = p2->link;
}
p1 = p1->link;
}
if (cnt < k) {
return 0;
}
printf("%d\n", p2->data);
return 1;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/mancuojie/408-ds.git
git@gitee.com:mancuojie/408-ds.git
mancuojie
408-ds
408-ds
main

搜索帮助