【LeetCode206】-反转链表

实现思路

使用三个节点指针维护进行逆序转化,属于链表基本操作,可以理解为基本不多开辟空间
基本流程如图所示
在这里插入图片描述在实现的过程中,记得考虑特殊位置第一个元素及最后一个元素,同时要考虑特殊空链表的情况

实现代码

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

实现思路

在这里插入图片描述在这里插入图片描述

提交结果及分析

在这里插入图片描述

时间复杂度为O(n)

猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/112918794