题目描述
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明
1 ≤ m ≤ n ≤ 链表长度。
示例
输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL
思路
难点在于理清节点翻转时的指向关系。
实现
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* dummy = new ListNode(-1);
ListNode* prev = dummy;
prev->next = head;
for (int i = 1; i < m; i++)
{
prev = prev->next;
}
ListNode* cur = prev->next;
for (int i = m; i < n; i++)
{
ListNode* ne = cur->next;
cur->next = ne->next;
ne->next = prev->next;
prev->next = ne;
}
return dummy->next;
}