開心IT面試題 檢測兩個非環鏈表是否有交點

2021-06-19 10:30:49 字數 729 閱讀 9896

題目:

給定兩個非環單鏈表(first, second),檢測兩個鍊錶是否有交點,如果有返回第乙個交點。

思路:如果first==second,那麼顯然相交,直接返回first。

否則,分別從first,second開始遍歷兩個鍊錶獲得其長度len1與len2。假設len1>len2,那麼指標p1由first開始向後移動len1-len2步。

指標p2=second,下面p1、p2每次向後前進一步並比較是否相等,如果相等即返回該結點,否則說明兩個鍊錶沒有交點。

**:

node *isintersect(node *first, node *second)

node *p1, *p2;

p1 = first;

p2 = second;

int len1 = length_linklist(first);

int len2 = length_linklist(second);

if(len1 >= len2)

}else

}while(p1 != null && p2 != null)

p1 = p1->next;

p2 = p2->next;

}return null;

}

注:**中所用到的計算單鏈表長度的length_linklist()函式請看

「單鏈表基礎」

擴充套件:考慮假設鍊錶有環,應該怎麼檢測是否有交點?

兩個面試題

1.實現乙個lite版的字串替換函式 c c char strreplace char str,const char sub,const char rep 限制條件和要求如下 1.其中str為原字串,sub為待被替換的子串。為簡單起見,假定字串sub和rep長度一樣 2.直接對原字串str進行修改並...

開心IT面試題 兩個有序鍊錶的合併

題目 有兩個有序鍊錶,各自內部是有序的,但是兩個鍊錶之間是無序的 思路 假設兩個有序鍊錶分別為first和second。建立兩個單鏈表p1,p2。分別從煉表頭開始遍歷,比較p1 data和p2 data,若p1 data p2 data,取p2,p1 p1 next 否則取p1,p2 p2 next...

面試題目 合併兩個有序單鏈表

乙個面試題目,將兩個遞增的有序單鏈表合併成乙個遞增單鏈表。有兩種理解 1 new乙個單鏈表,返回新的頭節點 2 在原煉表上操作,返回新的頭節點 第一種實現較為簡單,只需要從頭比較鍊錶的節點,將較小的插入新鍊錶,被插入的節點指標後移,直至遍歷整個鍊錶。而在原表操作就相對複雜一點,主要有三部分 首先確定...