首页 > 代码库 > 链表反转leetcode206

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

链表反转leetcode206