您的位置:首页 > 其它

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: