zoukankan      html  css  js  c++  java
  • leetcode 143. Reorder List 、86. Partition List

    143. Reorder List

    https://www.cnblogs.com/grandyang/p/4254860.html

    先将list的前半段和后半段分开,然后后半段进行逆序,然后再连接

    class Solution {
    public:
        void reorderList(ListNode* head) {
            if(head == NULL)
                return;
            ListNode* p1 = head;
            ListNode* p2 = head;
            while(p2->next != NULL && p2->next->next != NULL){
                p1 = p1->next;
                p2 = p2->next->next;
            }
            p2 = p1->next;
            p1->next = NULL;
            ListNode* pre = NULL;
            while(p2 != NULL){
                ListNode* tmp = p2->next;
                p2->next = pre;
                pre = p2;
                p2 = tmp;
            }
            p1 = head;
            p2 = pre;
            while(p2 != NULL){
                ListNode* tmp1 = p1->next;
                ListNode* tmp2 = p2->next;
                p1->next = p2;
                p2->next = tmp1;
                p1 = tmp1;
                p2 = tmp2;
            }
            return;
        }
    };

    86. Partition List

    这个题和143有点相似,都是用两个指针,分别表示前面满足条件的最后一个,后面满足条件的最后一个。

    但143的p2是只管当前指针,但86题p2是当前指针的前一个指针,因为86题需要判断是否满足小于x的条件,但143则不需要。

    主循环那部分,只适合下一个指针大于x的情况,所以先通过一个循环找到第一个大于的x的前一个指针。

    注意:要申请一个dummy指针保存最终的链表的返回,head指针也可能被排序排乱。

    比如下面这种情况:

    Input:
    [2,1]
    2
    Output:
    [2]
    Expected:
    [1,2]

    class Solution {
    public:
        ListNode* partition(ListNode* head, int x) {
            if(head == NULL)
                return NULL;
            ListNode* dummy = new ListNode(-1);
            dummy->next = head;
            ListNode* pre = dummy;
            while(pre->next && pre->next->val < x)
                pre = pre->next;
            ListNode* cur = pre;
            while(cur->next){
                if(cur->next->val >= x)
                    cur = cur->next;
                else{
                    ListNode* tmp = cur->next;
                    cur->next = tmp->next;
                    tmp->next  = pre->next;
                    pre->next = tmp;
                    pre = pre->next;
                }
            }
            return dummy->next;
        }
    };
  • 相关阅读:
    (8)Normalization
    (7)Drop out/Drop block
    (6)data augmentation——遮挡
    (5)label smooth
    (4)Focal loss
    (3)data augmentation——pixel-wise
    ostringstream 性能测试
    CPU & 多线程
    PC 常备软件(windows)
    编译器前端简介
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/10802768.html
Copyright © 2011-2022 走看看