/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
// write code here
ListNode* dumy = new ListNode(0);
dumy->next = head;
// 假设 节点长这样: p,a,b,c,d,q
// 1.找到p和q
ListNode* p = dumy;
for (int i = 0; i < m - 1; i ++) p = p->next;
ListNode* q = dumy;
for (int i = 0; i < n; i ++) q = q->next;
// 2.每次都p后面的节点放到d屁股后面
for (int i = 0; i < n - m; i ++) {
ListNode* take = p->next;
p->next = take->next;
take->next = q->next;
q->next = take;
show(dumy->next);
}
return dumy->next;
}
void show(ListNode* head) {
ListNode* p = head;
while (p) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
};