先用乙個 for 迴圈找到第 m 個位置,然後再用乙個 for 迴圈將 m 和 n 之間的元素反轉。但是我們的遞迴解法不用乙個 for 迴圈,純遞迴實現反轉。
迭代實現思路看起來雖然簡單,但是細節問題很多的,反而不容易寫對。相反,遞迴實現就很簡潔優美,下面就由淺入深,先從反轉整個單鏈表說起。
listnode reverse(listnode head)
想要理解遞迴**,首先要明確遞迴的定義
遇到遞迴千萬不要把思維跳進遞迴棧裡,你的腦子夠想幾層遞迴
而是要思考該遞迴執行完成的結果是什麼(根據定義)
listnode successor = null; // 後驅節點
// 反轉以 head 為起點的 n 個節點,返回新的頭結點
listnode reversen(listnode head, int n)
// 以 head.next 為起點,需要反轉前 n - 1 個節點
listnode last = reversen(head.next, n - 1);
head.next.next = head;
// 讓反轉之後的 head 節點和後面的節點連起來
head.next = successor;
return last;
}
現在 head 節點在遞迴反轉之後不一定是最後乙個節點了,所以要記錄後驅 successor(第 n + 1 個節點),反轉之後將 head 連線上。
listnode reversebetween(listnode head, int m, int n)
// 前進到反轉的起點觸發 base case
head.next = reversebetween(head.next, m - 1, n - 1);
return head;
}
2 5反轉鍊錶一部分
反轉鍊錶一部分 public static node reverse node head,int from,int to int len 0 鍊錶長度 node headcopy null 第from 1個節點 node tailcopy null 第tail 1個節點 for node p hea...
測試只是一部分
對於很多測試人員來說,測試相關的內容是工作的全部,這是我們的視角。但是換個角度也許就不是這樣。首先我們工作的地方大部分是商業組織,是某個公司,開發某類產品或者提供某類服務,也就是business。所以從組織的層級往上看,到了一定的級別,其實看到的是業務 產品等東西,當然他們也關心我們技術和競爭對手的...
Laravel 一部分總結
1.使用命令自動建立model層 進入所在目錄 php artisan make model test 2增刪改查 toarray 將資料變成陣列 public functionusertest 增 預設有兩個字段,可以在model層關閉,或者在表中新增 public timestamps fals...