zoukankan      html  css  js  c++  java
  • leetcode143. Reorder List

    leetcode143. Reorder List

    题意:

    给定单链表L:L0≤L1≤... Ln-1≤Ln,
    将其重新排序为:L0≤Ln≤L1≤Ln-1≤L2≤Ln-2≤...

    思路:

    第一次遍历把数组切成两半,然后吧右边的reverse,然后连接两个list,注意细节

    ac代码:

    C++

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        void reorderList(ListNode* head) {
            if(!head || !head->next) return;
            ListNode* slow = head;
            ListNode* fast = head->next;
            
            //find middle,cut list
            while(fast && fast->next)
            {
                slow = slow->next;
                fast = fast->next->next;
            }
            ListNode* head2 = slow->next;
            slow->next = NULL;
            
            //reverse right part
            ListNode* p2 = head2->next;
            head2->next = NULL;
            ListNode* p1 = p2;
            while(p2)
            {
                p1 = p2->next;
                p2->next = head2;
                head2 = p2;
                p2 = p1;
            }
           
            for(p1 = head,p2 = head2;p1;)
            {
                auto t = p1->next;
                p1 = p1->next = p2;
                p2 = t;
            }       
        }
    };
    

    python

    
    
  • 相关阅读:
    Git常用操作命令
    百度地图集成--二
    百度地图的集成--超详细
    iOS开发系列--地图与定位
    整理了一份React-Native学习指南(转)
    iOS高级编程之JSON,XML数据解析
    iOS开发基础
    C#001
    C#00
    英语学习tips
  • 原文地址:https://www.cnblogs.com/weedboy/p/7173165.html
Copyright © 2011-2022 走看看