143. 重排链表

2018-08-19  本文已影响0人  DAFFE

给定一个单链表 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;
}
上一篇 下一篇

猜你喜欢

热点阅读