遞迴解決反轉鍊錶的一部分

2022-10-10 20:39:18 字數 1318 閱讀 5239

先用乙個 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...