zoukankan      html  css  js  c++  java
  • Java for LeetCode 086

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

    You should preserve the original relative order of the nodes in each of the two partitions.

    For example,
    Given 1->4->3->2->5->2 and x = 3,
    return 1->2->2->4->3->5.

    解题思路:

    只需记录小于x的最后一个指针和大于x的第一个指针即可,JAVA实现如下:

    public ListNode partition(ListNode head, int x) {
    		if (head == null || head.next == null)
    			return head;
    		ListNode temp = head, firstMin = head;
    		if (head.val >= x) {
    			while (firstMin.next != null) {
    				if (firstMin.next.val < x) {
    					head = firstMin.next;
    					firstMin.next = firstMin.next.next;
    					head.next = temp;
    					break;
    				}
    				firstMin = firstMin.next;
    			}
    		}
    		if (head.val >= x)
    			return head;
    		firstMin = head;
    		temp=head.next;
    		
    		while (temp != null && temp.val < x) {
    			firstMin = firstMin.next;
    			temp = temp.next;
    		}
    		if(temp==null)
    			return head;
    		ListNode firstMax=temp,lastMax=temp;
    		temp=temp.next;
    		while(temp!=null){
    			if(temp.val<x){
    				firstMin.next=temp;
    				firstMin=firstMin.next;
    			}else{
    				lastMax.next=temp;
    				lastMax=lastMax.next;
    			}
    			temp=temp.next;
    		}
    		firstMin.next=firstMax;
    		lastMax.next=null;
    		return head;
    	}
    

    其实如果创建一个ListNode result指向head可以减少代码长度,JAVA实现如下:

        public ListNode partition(ListNode head, int x) {
            ListNode result = new ListNode(0);
            result.next = head;
            ListNode cur = result, lastMin, firstMax;
            while (cur.next != null && cur.next.val < x)
                cur = cur.next;
            lastMin = cur;		
            firstMax = cur.next;
            while (cur.next != null) {
                if (cur.next.val < x) {
                	lastMin.next = cur.next;
                    lastMin = lastMin.next;
                    cur.next = cur.next.next;
                    lastMin.next = firstMax;
                } else
                    cur = cur.next;
            }
            return result.next;
        }
    
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4515644.html
Copyright © 2011-2022 走看看