zoukankan      html  css  js  c++  java
  • 剑指 Offer 24. 反转链表

    思路

    解法一:双指针法

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* reverseList(ListNode* head) {
    12         ListNode *p = head, *q, *newList = NULL;
    13         while(p) {
    14             q = p->next;
    15             p->next = newList;
    16             newList = p;
    17             p = q;
    18         }
    19 
    20         return newList;
    21     }
    22 };

    复杂度分析

    时间复杂度:O(n),n为链表长度

    空间复杂度:O(1)

    解法二:递归解法

    这里不太好理解,建议参考:动画演示+多种解法 面试题24. 反转链表 中的ppt演示

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* reverseList(ListNode* head) {
    12         if(head == NULL || head->next == NULL) {
    13             return head;
    14         }
    15         ListNode* cur = reverseList(head->next);
    16         head->next->next = head;
    17         head->next = NULL;
    18         return cur;
    19     }
    20 };

    复杂度分析

    时间复杂度:O(n),n为链表长度

    空间复杂度:O(n),,n为链表长度,因为递归深度为n

    参考

    动画演示+多种解法 面试题24. 反转链表

  • 相关阅读:
    2020/10/10周总结
    2020/10/02周总结
    2020/9/28周总结
    第十二周总结
    第十一周总结
    人月神话阅读笔记03
    人月神话阅读笔记02
    人月神话阅读笔记01
    冲刺一8
    冲刺一7
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/13868051.html
Copyright © 2011-2022 走看看