文章

45

粉丝

0

获赞

1

访问

2.2k

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

(1) 算法思路:

  • 先遍历两个单链表,记录长度lens1,lens2,其差值为dif,将str指针移到dif位后开始比较,若有重复元素则将p指向它,并用flag记录。若flag保持至最后则表明P是所找后缀

(2)代码

typedef struct Node {
    char data;
    struct Node *next;
}PNode;

PNode solution(PNode *str1, PNode *str2) {
    int lens1=0,lens2=0,flag=0,k=0,m=0;
    PNode i = str1, j = str2, p = NULL;
    while(i->next != NULL) { i = i->next; lens1++; } // 求str1长度
    while(j->next != NULL) { j = j->next; lens2++; } // 求str2长度
    if(lens1>lens2) {
    for(m = 0; m < lens1-lens2; m++) { str1 = str1->next; }
    } else { for(m = 0; m < lens2-lens1; m++) { str2 = str2->next; }}
    while(str1->next != NULL) {
        str1 = str1->next; str2 = str2->next; // 其中一节点为头结点,先右移再比
        if(str1->data != str2->data) { flag = 0; }
        if(str1->data == str2->data&&flag == 0){
        p = str1; flag = 1; } // 找到第一个相同后缀
    } // while
    return p;
}

 (3)

该算法的时间复杂度为O(m+n),其中m和n分别...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发