您的位置:首页 > 职场人生

64_leetcode_reverse Linked List II

2014-06-20 09:51 323 查看
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
.

1:特殊情况;2:三种反转情况,反转的链在最前面,最后面,以及中间的情况;2:注意前后链接

ListNode *reverseBetween(ListNode *head, int m, int n)
{
if(head == NULL || head->next == NULL)
{
return head;
}

ListNode* newHead = NULL;

ListNode* firstNode = head;
ListNode* firstPre = NULL;
ListNode* secondNode = head;
ListNode* secondPre = NULL;

for(int i = 1; i < m; i++)
{
firstPre = firstNode;
firstNode = firstNode->next;
}

for(int i = 1; i < n; i++)
{
secondPre = secondNode;
secondNode = secondNode->next;
}

ListNode *nextNode = secondNode->next;
secondNode->next = NULL;

reverseList(firstNode, secondNode);

if(firstPre == NULL)
{
newHead = firstNode;
}
else
{
newHead = head;
firstPre->next = firstNode;
}

secondNode->next = nextNode;

return newHead;
}

void reverseList(ListNode* &head, ListNode *&end)
{
ListNode *preNode = NULL;
ListNode *curNode = head;
ListNode *nextNode = head->next;

while(nextNode)
{
curNode->next = preNode;
preNode = curNode;
curNode = nextNode;
nextNode = nextNode->next;
}
curNode->next = preNode;

end = head;
head = curNode;

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