zoukankan      html  css  js  c++  java
  • Leetcode: Partition List

    思路:

    1. 空间复杂度为 o(n) 解法. 创建两个链表, 分别记录大于 x 和小于 x 的节点, 最后合并

    2. o(1) 的空间复杂度解法. 四个指针, 分别指向小于 x 部分链表的头, 尾, 指向大于 x 部分链表的头, 尾

    总结:

    1. 使用 dummyNode 减少判断

    代码:

    class Solution {
    public:
        ListNode *partition(ListNode *head, int x) {
            ListNode *first, *second, *third, *fourth;
    		if(head == NULL)
    			return head;
    
    		ListNode *cursor = head;
    		ListNode *dummyNode = new ListNode(0);
    		dummyNode->next = head;
    		first = second =  dummyNode;
    		while(cursor && cursor->val < x) { 
    			second = cursor;
    			cursor = cursor->next;
    		}
    		if(cursor && cursor->val >= x) {
    			third = cursor;
    			fourth = cursor;
    		}
    		while(cursor) {
    			if(cursor->val < x) {
    				second->next = cursor;
    				fourth->next = cursor->next;
    				cursor->next = third;
    				second = cursor;
    			}else{
    				fourth = cursor;
    			}
    			cursor = cursor->next;
    		}
    		return dummyNode->next;
        }
    };
    

      

    Update

    较为简洁的代码

    class Solution {
    public:
        ListNode *partition(ListNode *head, int x) {
            if(head == NULL)
                return head;
    
            ListNode *sm = new ListNode(0), *sm_tail = sm;
            ListNode *bg = new ListNode(0), *bg_tail = bg;
            ListNode *cur = head;
    
            while(cur) {
                if(cur->val < x) {
                    sm_tail->next = cur;
                    cur     = cur->next;
                    sm_tail = sm_tail->next;
                    sm_tail->next = NULL;
                }else{
                    bg_tail->next = cur;
                    bg_tail = bg_tail->next;
                    cur = cur->next;
                    bg_tail->next = NULL;
                }
            }
            sm_tail->next = bg->next;
            return sm->next;
        }
    };
  • 相关阅读:
    vm virtualBox下 centos7 Linux系统 与本地 window 系统 网络连接 配置
    ArrayList的扩容机制
    如何在Anaconda中实现多版本python共存
    安装selenium和chromedriver
    python中安装pandas
    C#解析数组形式的json数据
    angular学习总结
    echarts实现环形图
    echarts实现折线图
    angular安装记录
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3459997.html
Copyright © 2011-2022 走看看