解题思路
代码实现(以上图来解释)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {
if(head == NULL || n - m <= 0)
return head;
struct ListNode* cur = head;
struct ListNode* end = cur;
struct ListNode* prev = NULL;
struct ListNode* next = NULL;
struct ListNode* start = cur;
int i = 1;
for(; i < m ; ++i)
{
start = cur;//保存1号结点
cur = cur->next;
end = cur;//保存2号结点
}
for(i = 0; i <= n - m ; ++i)
{
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}//实现2->4 3个结点的逆置,此时2的next指向空,cur和next都指向了 5,prev指向的是 4
start->next = prev;//1 的next指向 4
end->next = cur;//2 的next指向 5
if(m == 1)
return prev;//如果头结点也参与了逆置,那么新的头结点是逆置链表中的最后一个结点,也就是 4 结点
return head;
}