文章
96
粉丝
12
获赞
0
访问
24.7k
一、暴力法
1. 算法的基本设计思想
① 遍历第一个链表(str1)的每个数据节点,记为指针 p; ② 对每个 p,遍历第二个链表(str2)的所有数据节点,记为指针 q; ③ 比较 p 和 q 的地址,若相同,则该节点即为共同后缀的起始位置; ④ 重复上述步骤,直到找到第一个地址相同的节点。
2. 算法的 C 语言代码描述
c
typedef struct LinkNode {
char data;
struct LinkNode* next;
} LinkNode, *LinkList;
LinkNode* Find_1st_Common_Brute(LinkList str1, LinkList str2) {
LinkNode* p = str1->next; // p指向str1的第一个数据节点
while (p != NULL) {
LinkNode* q = str2->next; // q指向str2的第一个数据节点
while (q != NULL) {
if (p == q) { // 地址相同,找到共同后缀起始点
return p;
}
q = q->next; // 移动q遍历str2
}
p = p->next; // 移动p遍历str1
}
return NULL; // 题目保证存在共同后缀,实际可省略
}
3. 时间复杂度
时间复杂度为 ,其中 m、n 分别为两个链表的长度。
评分及理由
(1)得分及理由(满分4分)
得分:0分
理由:学生采用暴力法,通过双重循环遍历两个链表,比较节点地址。这种方法虽然能正确找到共同后缀起始位置,但时间复杂度为O(m*n),不符合题目要求的"时间上尽可能高效的算法"。标准答案要求先计算链表长度,然后对齐后同步遍历,时间复杂度为O(m+n)。学生的设计思想在时间效率上不符合题目要求。
(2)得分及理由(满分8分)
得分:4分
理由:代码实现...
登录后发布评论
暂无评论,来抢沙发