查詢兩個單詞鍊錶共同字尾的起始結點

2022-08-22 17:45:14 字數 930 閱讀 1649

描述假定採用帶頭結點的單鏈表儲存單詞,當兩個單詞有相同的字尾時,則可共享相同的字尾空間。例如,「loading」和「being」的儲存映像如下圖所示:

設str1和str2分別指向兩個單詞所在單鏈表的頭結點,請實現乙個時間上盡可能高效的演算法,找出由str1和str2所指的兩個鍊錶共同字尾的起始位置的結點,輸出該結點對應的字元(如圖中的字元i)

輸入多組資料,每組資料有三行,第一行為鍊錶str1和str2的長度n和m,第二行為鍊錶str1的n個元素,第三行為鍊錶str2的m個元素(元素之間用空格分隔)。n=0且m=0時輸入結束。

輸出對於每組資料輸出一行,為共同字尾的起始位置結點對應的字元。

樣例輸入1

複製

7 5

l o a d i n g

b e i n g

7 9f l u e n c y

f r e q u e n c y

0 0

樣例輸出1

i

u思路:找字尾起點->利用前插法將單詞倒序儲存,迴圈找到字母不一樣的結點,前乙個即為共同字尾的結尾。

#include

using namespace std;

typedef struct node

*list;

void create(list &l,int n)

}//前插法

void same(list &l1,list &l2)

else

break;//迴圈直到值不同

}if(flag==1)

coutreturn 0;

}

王道課後習題2 3 22 兩個鍊錶的共同字尾

題目描述 帶頭結點的單鏈表,尋找兩個鍊錶的共同字尾的起始位置。演算法思想 雙指標法 核心 雙指標法 int length lnode l 注意 這裡之前寫成了int length lnode l 用的引用。這樣的話,head1和head2最後都會變成null。難怪執行不對。return k lnod...

兩個相交鍊錶

兩個單鏈表相交的一系列問題 題目 在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1和head2,這兩個鍊錶可能相交,也可能 不相交。請實現乙個函式,如果兩個鍊錶相交,請返回相交的第乙個節點 如果不相交,返回null 即可。要求 如果鍊錶1 的長度為n,鍊錶2的長度為m,時間複...

合併兩個鍊錶

就是簡單的合併兩個鍊錶,這裡要求倆個鍊錶是有序的。比如 1 2 3 4 5 和 0 7 13 合併之後為 0 1 2 3 4 5 7 13 首先,簡單介紹一下思路,首先區遍歷倆個鍊錶,如果第乙個鍊錶的值小於等於第二個鍊錶的值,那麼將第乙個鍊錶的值插入乙個新的頭節點 鍊錶中,反之如果大於第二個鍊錶的值...