文章

78

粉丝

0

获赞

0

访问

3.5k

头像
2012年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年7月29日 17:27
阅读数 50

(1)

  1. 计算两个链表的长度 len1 和 len2

  2. 让较长的链表先移动 |len1 - len2| 步,使得两个链表剩余长度相同。

  3. 同时遍历两个链表,直到找到第一个相同的结点,即为共同后缀的起始位置。

(2)

int getLength(ListNode* head) {
    int len = 0;
    while (head) {
        len++;
        head = head->next;
    }
    return len;
}

// 找出共同后缀的起始结点
ListNode* findCommonSuffix(ListNode* str1, ListNode* str2) {
  
    // 计算两个链表的长度
    int len1 = getLength(str1);
    int len2 = getLength(str2);

    // 让较长的链表先移动 |len1 - len2| 步
    ListNode *p1 = str1, *p2 = str2;
    if (len1 > len2) {
        for (int i = 0; i < len1 - len2; i++) p1 = p1->next;
    } else {
        for (int i = 0; i < len2 - len1; i++) p2 = p2->next;
    }

    // 同步遍历,直到找到相同结点
    while (p1 && p2 && p1 != p2) {
        p1 = p1->next;
        p2 = p2->next;
    }

    return p1;
}

(3)O(m+n),m为str1的长度,n为str2的长度


评分及理由

(1)得分及理由(满分4分)

得分:4分

理由:学生的设计思想与标准答案完全一致,清晰地描述了计算链表长度、对...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发