/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* ReverseList(ListNode* head) {
// write code here
ListNode *r,*m,*b;
r=head;
if(head == NULL)
{
return head;
}
else if(r->next==NULL) //只有一个元素
{
//cout<<r->val;
}
else if (r->next->next==NULL) //只有两个元素
{
head = r->next; //将头指针的位置定义到最后一个
r->next=NULL;
r->next->next = r;
}
else //有三个以上元素
{
m=r->next;b=m->next;
r->next= NULL; //头指针的next指向空节点
while (b->next !=NULL)//取三个节点,前两个r,m反转链表,b保存剩余的链表头,每操作一次向后移一个节点
{
m->next = r;
r=m;m=b;b=m->next;
}
b->next = m ; m ->next = r; //最后三个节点直接反转
head = b; //将头指针的位置定义到最后一个
}
return head;
}
};