摘要:一定要認真看分析注釋題目要求題目描述輸入一個鏈表,從尾到頭打印鏈表每個節點的值。分析因為鏈表只有知道當前結點才能知道下一結點,所以不可能直接從后往前打印。
一定要認真看 分析 | 注釋 | 題目要求Question 1
題目描述:
輸入一個鏈表,從尾到頭打印鏈表每個節點的值。
分析:
因為鏈表只有知道當前結點才能知道下一結點,所以不可能直接從后往前打印。這種逆序的算法(策略)我們常用棧這種數據結構來解決,所以我們的基本思路為,先將鏈表壓入棧,再彈出,但是這樣做我們需要遍歷兩次才能得出答案,更奇妙的解決方案為一次將結點值插入數組頭部,一次便可以滿足題目要求,代碼如下:
val = $x; } }*/ function printListFromTailToHead($head) { $stack = []; if(!$head){ return $stack; } while($head){ array_unshift($stack,$head->val); #array_unshift返回頭插后的數組單元數目 $head = $head->next; } return $stack; }
測試地址:https://www.nowcoder.com/prac...
Question 2題目描述:
輸入一個鏈表,輸出該鏈表中倒數第k個結點。
分析:
前提:鏈表是動態分配的,事先不能知道鏈表的總長度
一般思路:遍歷鏈表,得出長度,輸出結點
面試思路:準備兩個指針,假如第一個指針走到n-1(即鏈表末尾),第二個指針走到倒數k的位置,兩者之間相差(n-1)-(n-k) = k-1,先讓一個指針走到k-1,第二個指針原地等待,然后讓第二個指針和第一個指針同時走,走到末尾,找到k,代碼如下:
next != null){ $head = $head->next; }else{ /* 注意:這里有一個隱藏的條件,就是鏈表的長度有可能小于k,當我們走到k-1時鏈表就已經遍歷結束,這種情況同樣非法 */ return null; } } /* 當第一個指針走到k-1且還不為空,這時讓第二個指針開始走,當第一個指針走到n-1的時候,第二個指針也走到了倒數第k的位置,即所求 */ while($head->next != null){ $head = $head->next; $behind = $behind->next; } return $behind; }
測試地址:https://www.nowcoder.com/prac...
Question 3題目描述:
輸入一個鏈表,反轉鏈表后,輸出鏈表的所有元素。
分析:
畫圖最佳 主要就是運用臨時節點 看注釋
next; #首先將鏈上第二個位置的值放在臨時容器中 $pHead->next = $cur; #將第二個位置賦一個空值 保持鏈的關系 $cur = $pHead; #將第一個位置的值賦給第二個位置 $pHead = $tmp; #將原第二個位置的值賦給頭結點 } return $cur; }
測試地址:https://www.nowcoder.com/prac...
Question 4題目描述:
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。
分析:
畫圖最佳 先用頭結點比較大小,小的壓入數組,大的和小的的后一位繼續比較
val = $x; } }*/ function MergeList($pHead1, $pHead2) { // write code here /* 先用頭結點比較大小,小的壓入數組,大的和小的的后一位繼續比較 */ if($pHead1 == null && $pHead2 == null){ return null; } if($pHead1 == null){ return $pHead2; } if($pHead2 == null){ return $pHead1; } $target = array(); if($pHead1 != null && $pHead2 != null){ #這里作判斷的目的主要是在遞歸過程中可能會有一方先遍歷結束 if($pHead1->val >= $pHead2->val){ $target = $pHead2; $target->next = MergeList($pHead1,$pHead2->next); }else{ $target = $pHead1; $target->next = MergeList($pHead1->next,$pHead2); } } return $target; }
測試地址:https://www.nowcoder.com/prac...
Question 5題目描述:
給定一個鏈表
1.判斷鏈表是否有環 2.鏈表起始結點(入口結點)
分析:
最近segment插圖好像出了點問題,我給個鏈接吧環形鏈表
function EntryNodeOfLoop($pHead) { // write code here if($pHead == null){ return null; } $fast = $pHead; $slow = $pHead; while($fast != null && $fast->next != null){ $fast = $fast->next->next; $slow = $slow->next; if($fast == $slow){ #存在環 $slow = $pHead; while($fast != $slow){ #此時slow為頭結點 $fast = $fast->next; $slow = $slow->next; } if($fast == $slow){ return $fast; } } } return null; }Question 6
題目描述:
“約瑟夫環”是一個數學的應用問題:一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數, 再數到第m只,在把它踢出去…,如此不停的進行下去, 直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。
分析:
第一個出列的猴子肯定是a[1]=m(mod)n,設此時某個猴子的新編號是i,他原來的編號就是(i+a[1])%n
/** * @param $monkeys Array 預設數組 * @param $m. Int。 預設剔除序號 * @param $cur. Int。 標記 */ function JosephCircle($monkeys , $m , $current = 0){ $number = count($monkeys); $num = 1; if(count($monkeys) == 1){ echo $monkeys[0]; return; } else{ while($num++ < $m){ $current++ ; $current = $current%$number; } echo $monkeys[$current]; array_splice($monkeys , $current , 1); #剔除 JosephCircle($monkeys , $m , $current); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28665.html
摘要:劍指中鏈表相關題目俗話說光說不練假把式,既然學習了鏈表的基礎概念和基本操作那我們一定要找些題目鞏固下,下面來看劍指中的相關題目。題目分析合并兩個排序的鏈表,需要分別比較兩個鏈表的每個值,然后改變指針。 溫故知新 鏈表由一個一個的作為節點的對象構成的,每一個節點都有指向下一個節點的指針,最后一個節點的指針域指向空。每個節點可以存儲任何數據類型。 根據類型可以分為單鏈表、雙鏈表、環形鏈表、...
摘要:假設反轉對象節點為,反轉指向的結點為,反轉后指向的結點為首結點。當然也可以根據棧先進后出的特點,使用棧反轉鏈表。 ??前面的話?? 大家好!博主開辟了一個新的專欄—...
摘要:正如我標題所說,簡歷被拒。看了我簡歷之后說頭條競爭激烈,我背景不夠,點到為止。。三準備面試其實從三月份投遞簡歷開始準備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學投稿的面試經歷 關注微信公眾號:進擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學的分享 目錄: 印象中的頭條 面試背景 準備面試 ...
摘要:正如我標題所說,簡歷被拒。看了我簡歷之后說頭條競爭激烈,我背景不夠,點到為止。。三準備面試其實從三月份投遞簡歷開始準備面試到四月份收,也不過個月的時間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學投稿的面試經歷 關注微信公眾號:進擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學的分享目錄:印象中的頭條面試背景準備面試頭條一面(Java+項目)頭條...
閱讀 1490·2021-11-22 13:52
閱讀 1309·2021-09-29 09:34
閱讀 2715·2021-09-09 11:40
閱讀 3038·2019-08-30 15:54
閱讀 1265·2019-08-30 15:53
閱讀 979·2019-08-30 11:01
閱讀 1364·2019-08-29 17:22
閱讀 1957·2019-08-26 10:57