143 Reorder List
链接:https://leetcode.com/problems/reorder-list/
问题描述:
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes’ values.
For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.
Hide Tags Linked List
问题关键是找到链表中间的那个节点,找到后,后半部分节点求逆序。然后两个链表连接起来就好。
class Solution {
public:
ListNode* reverseList(ListNode* head)
{
ListNode *t=new ListNode(0),*cur=NULL;
t->next=head;
cur=head;
head=head->next;
cur->next=NULL;
while(head)
{
t->next=head;
head=head->next;
t->next->next=cur;
cur=t->next;
}
cur=t->next;
delete t;
return cur;
}
void reorderList(ListNode* head)
{
if(head==NULL||head->next==NULL)
return ;
ListNode *mid=head,*p=head,*p2,*t,*t2;
while(p&&p->next&&p->next->next)
{
p=p->next->next;
mid=mid->next;
}
p2=mid->next;
mid->next=NULL;
p2= reverseList(p2);
p=head;
while(p&&p2)
{
t=p->next;
t2=p2->next;
p->next=p2;
p->next->next=t;
p=t;
p2=t2;
}
}
};