文章

96

粉丝

12

获赞

0

访问

24.7k

头像
2012年(408)计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年11月7日 18:19
阅读数 205

一、暴力法

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分

理由:代码实现...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发