美文网首页
143. 重排链表

143. 重排链表

作者: DAFFE | 来源:发表于2018-08-19 15:41 被阅读0次

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

    相关文章

      网友评论

          本文标题:143. 重排链表

          本文链接:https://www.haomeiwen.com/subject/rhbfiftx.html