链表反转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