您的位置:首页 > 其它

leetcode Reorder List

2014-08-01 16:14 357 查看
本题的思路:

1.将原链表从中间分成两个链表A,B。

2.逆置B,此处可根据逆序伐穿件链表来做。

3.然后针对每个元素依次合并A,B。

代码

ListNode*  reverseList(ListNode*head)
{
ListNode* p, *headtemp;
p = head;
headtemp = new ListNode(0);
while(p!=NULL)
{
ListNode * q;
q = p;
p = p->next;
q->next = headtemp->next;
headtemp->next = q;
}

return headtemp->next;

}

ListNode * mergeLists(ListNode *head1, ListNode *head2)
{
ListNode *pnext1, *pnext2, *p, *q;
pnext1 = head1;
pnext2 = head2;

q = new ListNode(0);
p = q;

while(pnext1!=NULL&&pnext2!=NULL)
{
p ->next = pnext1;
pnext1 = pnext1->next;
p = p->next;

p->next = pnext2;
pnext2 = pnext2->next;
p = p->next;

}

if(pnext1!=NULL)
p->next = pnext1;
if(pnext2!=NULL)
p->next = pnext2;

return q->next;

}

ListNode* reorderList(ListNode *head)
{
if(head==NULL)
return ;

ListNode *fast, *slow, *last;
slow = head;
fast = head;

while(slow->next!=NULL&&fast->next!=NULL&&fast->next->next!=NULL)
{
slow = slow->next;
fast = fast->next->next;
}

ListNode * head2;
head2 = slow->next;
slow->next = NULL;

//反转后半部分链表
head2 = reverseList(head2);

//合并两个链表
head = mergeLists(head, head2);

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