• 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;
        }
    };
  • 相关阅读:
    STL容器 erase的使用陷井
    转:VC++线程同步-事件对象
    VC线程同步方法
    C/C++四种退出线程的方法
    rabbitMQ 常用命令
    Spring @Configuration
    Spring RabbitMQ 延迟队列
    rabbitmq web管理界面 用户管理
    Linux下tar.gz 安装
    Linux下RPM软件包的安装及卸载
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3459997.html
Copyright © 2020-2023  润新知