描述假定採用帶頭結點的單鏈表儲存單詞,當兩個單詞有相同的字尾時,則可共享相同的字尾空間。例如,「loading」和「being」的儲存映像如下圖所示:
設str1和str2分別指向兩個單詞所在單鏈表的頭結點,請實現乙個時間上盡可能高效的演算法,找出由str1和str2所指的兩個鍊錶共同字尾的起始位置的結點,輸出該結點對應的字元(如圖中的字元i)
輸入多組資料,每組資料有三行,第一行為鍊錶str1和str2的長度n和m,第二行為鍊錶str1的n個元素,第三行為鍊錶str2的m個元素(元素之間用空格分隔)。n=0且m=0時輸入結束。
輸出對於每組資料輸出一行,為共同字尾的起始位置結點對應的字元。
樣例輸入1
複製
7 5l 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#includeu思路:找字尾起點->利用前插法將單詞倒序儲存,迴圈找到字母不一樣的結點,前乙個即為共同字尾的結尾。
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 首先,簡單介紹一下思路,首先區遍歷倆個鍊錶,如果第乙個鍊錶的值小於等於第二個鍊錶的值,那麼將第乙個鍊錶的值插入乙個新的頭節點 鍊錶中,反之如果大於第二個鍊錶的值...