最近准备结束自己的科研生涯,准备要开始找工作了,准备在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,是个不错的尝试。这是目前我所能想到的比较简单的方法。

相关文章:

  • 2021-12-03
  • 2022-01-22
  • 2021-12-13
  • 2021-09-03
  • 2021-07-08
  • 2019-10-30
  • 2021-06-11
猜你喜欢
  • 2021-10-16
  • 2021-12-01
  • 2021-07-07
  • 2020-02-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案