最近准備結束自己的科研生涯,准備要開始找工作了,准備在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,是個不錯的嘗試。這是目前我所能想到的比較簡單的方法。