给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:
给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
ListNode* reorderList(ListNode* head) {
if (head==NULL) exit(0);
ListNode* slow=head, * fast=head;
while (fast!=NULL && fast->next!=NULL){
slow=slow->next;
fast=fast->next->next;
}
stack <ListNode*> s ;
ListNode* HalfInsert= slow->next;
while(HalfInsert!=NULL){
s.push(HalfInsert);
HalfInsert=HalfInsert->next;
}
ListNode* current=head;
while (!s.empty() && current!=NULL){
ListNode* temp=current->next;
current->next=s.top();
s.pop();
current->next->next = temp;
current=temp;
}
return head;
}
网友评论