您的位置:首页 > 其它

Leetcode#92 Reverse Linked List II

2015-01-29 14:00 351 查看
原题地址

第一步,找到将要翻转的位置,记录翻转部分前一个节点(prev)

第二步,翻转,记录翻转完成后这部分的首(reverseHead)和尾(reverseTail),以及翻转部分之后的一个节点(post)

第三部,将prev、reverseHead、reverseTail、post连接起来

代码:

ListNode *reverseBetween(ListNode *head, int m, int n) {
ListNode *node = head;
ListNode *prev = NULL;
ListNode *post = NULL;
ListNode *reverseHead = NULL;
ListNode *reverseTail = NULL;
int count = 1;

if (!head)
return NULL;

prev = NULL;
while (node && count < m ) {
prev = node;
node = node->next;
count++;
}

if (!node)
return head;

reverseTail = node;
post = node->next;
while (post && count < n) {
ListNode *postNext = post->next;
post->next = node;
node = post;
post = postNext;
count++;
}
reverseHead = node;
reverseTail->next = post;

if (!prev)
return reverseHead;
else {
prev->next = reverseHead;
return head;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: