您的位置:首页 > 其它

[LeetCode] 92. Reverse Linked List II

2017-12-10 18:11 260 查看

92. Reverse Linked List II (翻转链表II)

Reverse Linked List II 翻转链表II
题目翻译

解题方法

代码

1. 题目翻译

将给定链表的位置m到n之间的结点翻转。要求原地操作,并且只能遍历一次。假设1 ≤ m ≤ n ≤ 链表长度

例子:

Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL


2. 解题方法

首先找到第m个结点的前驱,然后按照206. Reverse Linked List翻转链表的操作,将m到n之间的结点翻转。需要考虑到头结点需要被翻转,为了避免分类讨论,创建一个指向头结点的flag结点,以简化操作。

3. 代码

//Runtime: 3ms
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(!head)
return head;

ListNode* flag = new ListNode(0);
flag->next = head;

int i = 1;
ListNode* p = flag;

while(p&&i<m){
p = p->next;
i++;
}

ListNode* q = p->next;
i = 0;
while(i<n-m){
ListNode* temp = p->next;
p->next = q->next;
q->next = q->next->next;
p->next->next = temp;
i++;
}

return flag->next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: