leetcode--Partition List

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.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    /**This is a fundamental problem. But we need to pay attention to some subtle problems.
     * such as the null pointers.
     * @author Averill Zheng
     * @version 2016-06-07
     * @since JDK 1.7
     */
    public ListNode partition(ListNode head, int x) {
        ListNode newHead = new ListNode(0);
		if(head != null){
			newHead.next = head;
			ListNode firstLarger = head;
			ListNode insertPosition = newHead;
			while(firstLarger != null && firstLarger.val < x){
				insertPosition = insertPosition.next;
				firstLarger = firstLarger.next;
			}
			ListNode current = firstLarger;
			while(firstLarger != null){
				if(firstLarger.val >= x){
					current = firstLarger;
					firstLarger = firstLarger.next;
				}
				else{
					current.next = firstLarger.next;
					firstLarger.next = insertPosition.next;
					insertPosition.next = firstLarger;
					insertPosition = insertPosition.next;
					firstLarger = current.next;
				}
			}
		}
		newHead = newHead.next;
		return newHead;
    }
}

  

原文地址:https://www.cnblogs.com/averillzheng/p/3779024.html