链表反转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,是个不错的尝试。这是目前我所能想到的比较简单的方法。