Create 92. Reverse Linked List II.md

This commit is contained in:
唐树森 2019-03-24 23:39:01 +08:00 committed by GitHub
parent 824e3a1011
commit 4dc82bd55c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,32 @@
# [92. Reverse Linked List II](https://leetcode.com/problems/reverse-linked-list-ii/)
# 思路
首先还是开辟一个真正的头结点real_head, 其next指针指向head。然后向后移动`m - 1`步到达需要翻转的第一个节点的前一个节点记为pre如果按照下面的例子的话
pre就指向1然后我们翻转pre后面的`n-m`个节点即可。
```
Input: 1->2->3->4->5->NULL, m = 2, n = 4
Output: 1->4->3->2->5->NULL
```
# C++
``` C++
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode *real_head = new ListNode(0);
real_head -> next = head;
ListNode *p, *pre = real_head, *tmp;
n -= m;
while(--m) pre = pre -> next;
p = pre -> next;
// reverse n-m nodes
while(n--){
tmp = p -> next;
p -> next = tmp -> next;
tmp -> next = pre -> next;
pre -> next = tmp;
}
return real_head -> next;
}
};
```