Reverse Linked List II
2014-08-28 17:58
113 查看
截取m到n之间的链表部分,调用通用的reverse函数进行翻转,然后连接到原链表中。
class Solution {
public:
ListNode *reverseBetween(ListNode *head, int m, int n) {
ListNode dummy1(-1);
dummy1.next = head;
ListNode *curm, *curn, *beforem, *aftern;
curm = &dummy1;
curn = &dummy1;
for(int i=0; i<m; i++)
{
beforem = curm;
curm = curm->next;
}
for(int i=0; i<n; i++)
curn = curn->next;
aftern = curn->next;
curn->next = NULL;
beforem->next = NULL;
curm = reverse(curm);
beforem->next = curm;
while(curm->next)
curm = curm->next;
curm->next = aftern;
return dummy1.next;
}
ListNode* reverse(ListNode *head)
{
if(!head || head->next == NULL)
return head;
ListNode *prev, *cur, *next;
for(prev = head, cur = prev->next, next = cur->next;
cur;
prev = cur, cur = next, next = next?next->next:NULL)
cur->next = prev;
head->next = NULL;
return prev;
}
};
class Solution {
public:
ListNode *reverseBetween(ListNode *head, int m, int n) {
ListNode dummy1(-1);
dummy1.next = head;
ListNode *curm, *curn, *beforem, *aftern;
curm = &dummy1;
curn = &dummy1;
for(int i=0; i<m; i++)
{
beforem = curm;
curm = curm->next;
}
for(int i=0; i<n; i++)
curn = curn->next;
aftern = curn->next;
curn->next = NULL;
beforem->next = NULL;
curm = reverse(curm);
beforem->next = curm;
while(curm->next)
curm = curm->next;
curm->next = aftern;
return dummy1.next;
}
ListNode* reverse(ListNode *head)
{
if(!head || head->next == NULL)
return head;
ListNode *prev, *cur, *next;
for(prev = head, cur = prev->next, next = cur->next;
cur;
prev = cur, cur = next, next = next?next->next:NULL)
cur->next = prev;
head->next = NULL;
return prev;
}
};
相关文章推荐
- Reverse Linked List II
- Reverse Linked List II
- [LeetCode85]Reverse Linked List II
- 92. Reverse Linked List II
- Reverse Linked List II
- 92. Reverse Linked List II
- C实现 LeetCode->Reverse Linked List II (双指针大法)(单链表反转)
- leetcode[92]:Reverse Linked List II
- [LeetCode]Reverse Linked List II, 解题报告
- leetcode:Reverse Linked List II
- leetcode--Reverse Linked List II
- 92. Reverse Linked List II
- LeetCode OJ - Reverse Linked List II
- 92. Reverse Linked List II
- 206. Reverse Linked List && 92. Reverse Linked List II
- Reverse Linked List II (leetcode)
- leetcode 之Reverse Linked List II(15)
- leetcode || 92、Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II