2 Star 9 Fork 5

xusun000 / 408-所有真题算法

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2012_code_doublelink.cpp 1.52 KB
一键复制 编辑 原始数据 按行查看 历史
xusun000 提交于 2021-12-01 16:31 . 更改名称
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
char data;
struct node* link;
}NODE;
void create(NODE* p, char a[], int pos, int length) {
if (pos < length) {
p->data = a[pos];
p->link = (NODE*)malloc(sizeof(NODE));
p->link->data = '\0';//用\0作为结束标志
create(p->link, a, pos + 1, length);
}
}
NODE* getSameNode(NODE* a, NODE* b) {
int a_length = 0, b_length = 0;
NODE* a_p = a->link, * b_p = b->link;
while (a_p->data != '\0') {//统计a的节点数
a_length++;
a_p = a_p->link;
}
while (b_p->data != '\0') {//统计b的节点数
b_length++;
b_p = b_p->link;
}
NODE* a_scan = a->link, * b_scan = b->link;
while (a_length < b_length) {//快指针先走
b_scan = b_scan->link;
b_length--;
}
while (b_length < a_length) {//快指针先走
a_scan = a_scan->link;
a_length--;
}
while (a_length-- > 0) {
if (a_scan == b_scan) {
return a_scan;
}
else {
a_scan = a_scan->link;
b_scan = b_scan->link;
}
}
return NULL;
}
int main() {
NODE a, b;
create(&a, "loading", 0, 7);
create(&b, "being", 0, 5);
NODE* tmp = b.link->link->link;
b.link->link = a.link->link->link->link;
free(tmp);
//两条交叉链构建完毕
NODE a_with_head, b_with_head;
a_with_head.link = &a;
b_with_head.link = &b;
NODE* same = getSameNode(&a_with_head, &b_with_head);
return 0;
}
1
https://gitee.com/xusun000/exam_code_for_408.git
git@gitee.com:xusun000/exam_code_for_408.git
xusun000
exam_code_for_408
408-所有真题算法
master

搜索帮助