数据结构——第二章线性表·2012真题

MiracleWolf 2024-2-11 116 2/11

一、题目描述

数据结构——第二章线性表·2012真题

二、算法步骤

相同后缀题目中指的是:两个链表从第x个节点开始,往后的字母都相同。想找到相同后缀,对于长度相同的链表,可以让pq指针分别指向他俩,然后一起走,走到相同的字母处就是公共后缀的开始。但对于长度不同的链表,需要让长的先走一会,然后一起走,这样保证两个链表是尾部对齐的,此时就很好找公共后缀了。
因此首先计算每个链表的长度n、m,然后谁长谁先走max(n,m)-min(n,m)步,然后一起走,接着判断是否走到了相同元素,如果是,就打印。

int GetLength(LinkList* L)//求链表长度
{
    Node* cur = L->next;
    int cnt = 0;
    while (cur != NULL)
    {
        cnt++;
        cur = cur->next;
    }
    return cnt;
}
    n = GetLength(L);
    m = GetLength(L2);
    cur = L;
    Node* cur2 =L2;
    if (n > m)//谁长谁就先走
    {
        int k = n - m;
        cur = L;
        for (int i = 0; i < k; i++)
        {
            cur = cur->next;
        }
    }
    else
    {
        int  k = n - m;
        cur2 = L2;
        for (int i = 0; i < k; i++) { cur = cur->next; }
    }

    while (cur || cur2)//然后两者一起走,只要指向的元素相同即可。
    {
        if (cur->data == cur2->data) { cout << cur->data; }
        cur = cur->next;
        cur2 = cur2->next;
    }

结果展示:
```cpp
7 5
loading
L1为
l->o->a->d->i->n->g
being
L2为
b->e->i->n->g
ing


  时间复杂度为O(max(n,m))或者O(n+m);
三、总结
  本题较为简单,关键点是使两个链表尾部对齐,然后设置双指针依此查找。
- THE END -

MiracleWolf

2月11日16:15

最后修改:2024年2月11日
0