8道链表常考题-链表逆序

单链表的基本操作

8道链表常考题-链表逆序_第1张图片

8道链表常考题-链表逆序_第2张图片

链表逆序1

已知链表头节点指针head,将链表逆序。(不可申请额外空间)
8道链表常考题-链表逆序_第3张图片

迭代法:头插到新链表中

8道链表常考题-链表逆序_第4张图片
8道链表常考题-链表逆序_第5张图片
8道链表常考题-链表逆序_第6张图片
8道链表常考题-链表逆序_第7张图片
8道链表常考题-链表逆序_第8张图片
复杂度分析

  • 时间复杂度:O(n),假设 n 是列表的长度,时间复杂度是 O(n)。
  • 空间复杂度:O(1)。

8道链表常考题-链表逆序_第9张图片

递归法:

8道链表常考题-链表逆序_第10张图片

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head == NULL || head->next == NULL) return head;
        ListNode * p = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return p;
    }
};

链表逆序2

已知链表头节点指针head,将链表从位置m到n逆序(不申请额外空间)。
在这里插入图片描述

8道链表常考题-链表逆序_第11张图片
8道链表常考题-链表逆序_第12张图片
8道链表常考题-链表逆序_第13张图片

8道链表常考题-链表逆序_第14张图片

你可能感兴趣的:(算法)