鏈表反轉leetcode206


最近准備結束自己的科研生涯,准備要開始找工作了,准備在LEETCODE刷刷題...刷的前40題全部用python刷的,各種調包速度奇快,后被師哥告知這樣沒意義,於是准備開始回歸C++,Python用的多了再用C++總是忘記敲分號和括號,甚至Compile Error了幾次 = =。尷尬

鏈表反轉比較簡單,首先用自己的“本科”方法做了一下,發現效率並不高:

 1 class Solution {
 2 public:
 3     ListNode* reverseList(ListNode* head) {
 4         ListNode *p = head;
 5         if(p == NULL||p->next == NULL){
 6             return p;
 7         }
 8         ListNode *q,*r;
 9         q = p->next;
10         p->next = NULL;
11         while(q != NULL){
12             r = q->next;
13             q->next = p;
14             p = q;
15             q = r;
16         }
17         return p;
18     }
19 };

完全常規的方法,13ms。后來想了一下可以遞歸的求試試:

 1 class Solution {
 2 public:
 3     ListNode* reverseList(ListNode* head) {
 4         if(head == NULL||head->next == NULL){
 5             return head;
 6         }
 7         ListNode *ans = reverseList(head->next);
 8         head->next->next = head;
 9         head->next = NULL;
10         return ans;
11     }
12 };

這個方法求解加速到了6ms,是個不錯的嘗試。這是目前我所能想到的比較簡單的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM