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;
        }
    
  • 相关阅读:
    【学习笔记】查看CUDA版本
    如果Visual Studio太大,不妨还是用VSCode开发C#项目吧
    Visual Studio npm配置淘宝镜像
    c++读写锁--读者写者问题
    c++内存对象模型--vs2017下的分析,32位
    android作业
    android连接数据库
    android第十周(增删改查)
    android-购物车
    android计算器
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4515644.html
Copyright © 2011-2022 走看看