
思路分析:
(1)定义三个 链表指针,分别指向NULL、头节点以及头节点的下一个位置
(2)进入while循环,循环条件是中间节点不能为空
(3)循环中的操作就是将中间指针指向左指针,因此左指针的应该为反转链表的尾巴,所以初值为NULL,右指针的作用就是方便中间指针改变指向之后,可以移动到改变之前的下一个位置。
(4)最后返回左指针即可。
代码实现:
/**
* 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) {
if(head==nullptr||head->next==nullptr)
return head;
ListNode* p0=nullptr;
ListNode* p1=head;
ListNode* p2=head->next;
while(p1!=nullptr)
{
p1->next=p0;
p0=p1;
p1=p2;
if(p2!=nullptr)
p2=p2->next;
}
return p0;
}
};版权声明:本文为weixin_63638351原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。