实现思路
使用三个节点指针维护进行逆序转化,属于链表基本操作,可以理解为基本不多开辟空间
基本流程如图所示
在实现的过程中,记得考虑特殊位置第一个元素及最后一个元素,同时要考虑特殊空链表的情况
实现代码
/**
* 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)