當前位置:學問谷 >

職場範例 >面試 >

鏈表相關面試題

鏈表相關面試題

題一、 給定單鏈表,檢測是否有環。

鏈表相關面試題

使用兩個指針p1,p2從鏈表頭開始遍歷,p1每次前進一步,p2每次前進兩步。如果p2到達鏈表尾部,説明無環,否則p1、p2必然會在某個時刻相遇(p1==p2),從而檢測到鏈表中有環。

題二、 給定兩個單鏈表(head1, head2),檢測兩個鏈表是否有交點,如果有返回第一個交點。

如果head1==head2,那麼顯然相交,直接返回head1。

否則,分別從head1,head2開始遍歷兩個鏈表獲得其長度len1與len2。假設len1>=len2,那麼指針p1由head1開始向後 移動len1-len2步。指針p2=head2,下面p1、p2每次向後前進一步並比較p1p2是否相等,如果相等即返回該結點,否則説明兩個鏈表沒有 交點。

題三、 給定單鏈表(head),如果有環的話請返回從頭結點進入環的第一個節點。

運用題一,我們可以檢查鏈表中是否有環。

如果有環,那麼p1p2重合點p必然在環中。從p點斷開環,方法為:p1=p, p2=p->next, p->next=NULL。此時,原單鏈表可以看作兩條單鏈表,一條從head開始,另一條從p2開始,於是運用題二的方法,我們找到它們的'第一個 交點即為所求。

題四、只給定單鏈表中某個結點p(並非最後一個結點,即p->next!=NULL)指針,刪除該結點。

辦法很簡單,首先是放p中數據,然後將p->next的數據copy入p中,接下來刪除p->next即可。

題五、只給定單鏈表中某個結點p(非空結點),在p前面插入一個結點。

辦法與前者類似,首先分配一個結點q,將q插入在p後,接下來將p中的數據copy入q中,然後再將要插入的數據記錄在p中。

題六、給定單鏈表頭結點,刪除鏈表中倒數第k個結點。

使用兩個節點p1,p2,p1初始化指向頭結點,p2一直指向p1後第k個節點,兩個結點平行向後移動直到p2到達鏈表尾部(NULL),然後根據p1刪除對應結點。


標籤: 面試題 鏈表
  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flzc/mianshi/nv6qk1.html