Leetcode92题
**
反转链表2
**
链表定义如下
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
以下为解答过程
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode *pre=head,* neww,* old,* tmp;
int i=1;
if(m==1)
neww=head; //m==1单独讨论
else
{
while(i<m-1)
{
pre=pre->next;
i++;
}
i++;
neww=pre->next; //neww指向反转的起始点,如2
}
old=neww->next;
while(i<n && old!=NULL)
{
tmp=old->next;
old->next=neww;
neww=old;
old=tmp;
i++;
}
if(m==1)
{
head->next=old;
head=neww;
return head;
}
else
{
pre->next->next=old;
pre->next=neww;
return head;
}
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190603204843578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzEwOTMyNQ==,size_16,color_FFFFFF,t_70)