From 4dc82bd55c4eec324ab57c55b2abe515a3fe1910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= Date: Sun, 24 Mar 2019 23:39:01 +0800 Subject: [PATCH] Create 92. Reverse Linked List II.md --- solutions/92. Reverse Linked List II.md | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 solutions/92. Reverse Linked List II.md diff --git a/solutions/92. Reverse Linked List II.md b/solutions/92. Reverse Linked List II.md new file mode 100644 index 0000000..46e3c96 --- /dev/null +++ b/solutions/92. Reverse Linked List II.md @@ -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; + } +}; +```