码迷,mamicode.com
首页 > 编程语言 > 详细

Java for LeetCode 086

时间:2015-05-19 22:23:36      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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.

解题思路:

只需记录小于3的最后一个指针和大于3的第一个指针即可,另外,如有创建一个ListNode result指向head可以减少代码长度,这个给出最简单的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;
	}

 

Java for LeetCode 086

标签:

原文地址:http://www.cnblogs.com/tonyluis/p/4515644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!