[leetcode]Reverse Linked List II
2017-05-25 22:28
609 查看
Reverse Linked List II
Difficulty:Medium
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
return
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
题目就是要逆置链表中的一段,并且要求空间负责都为O(1),并且一次遍历处理完。
首先是找到逆置段的前一个节点,从逆置段的第二个节点开始,按顺序把要逆置的节点插入到逆置段的前一个节点后面,直到逆置段结束。
比如题目的例子,逆置段前一个节点是节点1,那这里的第一步就是把节点3插入到节点1后面:1->3->2->4->5 ; 第二步就是把节点4插入到节点1后面:1->4->3->2->5,通过这两部步就完成了逆置。
ListNode* reverseBetween(ListNode* head, int m, int n) {
if (head == NULL)
return NULL;
if (m == n)
return head;
ListNode newHead(0);//新的头 以防m为0时需要从头开始逆置
newHead.next = head;
ListNode *p = &newHead,*reverseHead=NULL,*current=NULL;
for(int i = 0; i < m - 1; i++)//找到开始逆置的前一个位置
p = p->next;
reverseHead = p;//保存开始逆置的前一个位置
p=p->next;
current = p->next;
for(int i = m;i<n;i++){//把要逆置的节点不断插入到reverseHead后面
p->next = current->next;
current->next = reverseHead->next;
reverseHead->next = current;
current = p->next;
}
return newHead.next;
}
Difficulty:Medium
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given
1->2->3->4->5->NULL, m = 2 and n = 4,
return
1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
题目就是要逆置链表中的一段,并且要求空间负责都为O(1),并且一次遍历处理完。
首先是找到逆置段的前一个节点,从逆置段的第二个节点开始,按顺序把要逆置的节点插入到逆置段的前一个节点后面,直到逆置段结束。
比如题目的例子,逆置段前一个节点是节点1,那这里的第一步就是把节点3插入到节点1后面:1->3->2->4->5 ; 第二步就是把节点4插入到节点1后面:1->4->3->2->5,通过这两部步就完成了逆置。
ListNode* reverseBetween(ListNode* head, int m, int n) {
if (head == NULL)
return NULL;
if (m == n)
return head;
ListNode newHead(0);//新的头 以防m为0时需要从头开始逆置
newHead.next = head;
ListNode *p = &newHead,*reverseHead=NULL,*current=NULL;
for(int i = 0; i < m - 1; i++)//找到开始逆置的前一个位置
p = p->next;
reverseHead = p;//保存开始逆置的前一个位置
p=p->next;
current = p->next;
for(int i = m;i<n;i++){//把要逆置的节点不断插入到reverseHead后面
p->next = current->next;
current->next = reverseHead->next;
reverseHead->next = current;
current = p->next;
}
return newHead.next;
}
相关文章推荐
- leetcode 41: Reverse Linked List II
- leetcode 76: Reverse Linked List II
- [leetcode] Reverse Linked List II
- LeetCode_Reverse Linked List II
- LeetCode-Reverse Linked List II
- leetcode 41: Reverse Linked List II
- LeetCode:Reverse Linked List II
- LeetCode Online Judge 题目C# 练习 - Reverse Linked List II
- leetcode -- Reverse Linked List II
- [Leetcode]Reverse Linked List II
- [LeetCode] Reverse Linked List II
- [LeetCode] Reverse Linked List II 解题报告
- [Leetcode] Reverse Linked List II
- leetcode--Reverse Linked List II
- [LeetCode]Reverse Linked List II
- leetcode 76: Reverse Linked List II
- LeetCode —— Reverse Linked List II
- [leetcode]Reverse Linked List II
- [LeetCode] Reverse Linked List II
- LeetCode: Reverse Linked List II