Problem Description
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.
[https://leetcode.com/problems/partition-list/]
思路
用俩指针分别保存左部分和右部分,注意边界值就好惹。。。。
Code
package Q86;
public class Solution {
static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public static ListNode partition(ListNode head, int x) {
ListNode left=null;
ListNode right=null;
ListNode lefthead=null;
ListNode righthead=null;
while(head!=null){
if(head.val<x){
if(left==null){
lefthead=head;
left=head;
}
else left.next=head;
left=head;
}
else{
if(right==null){
righthead=head;
right=head;
}
else right.next=head;
right=head;
}
head=head.next;
}
if(left==null&&right==null) return null;
else if(left!=null){
left.next=righthead;
}
else{
lefthead=righthead;
}
if(right!=null) right.next=null;
return lefthead;
}
// public static void main(String[] args) {
//
// ListNode a1=new ListNode(1);
// ListNode a2=new ListNode(4);
// ListNode a3=new ListNode(3);
// ListNode a4=new ListNode(2);
// ListNode a5=new ListNode(5);
// ListNode a6=new ListNode(2);
//
// a1.next=a2;
// a2.next=a3;
// a3.next=a4;
// a4.next=a5;
// a5.next=a6;
//
// ListNode b= partition(a6, 1);
// while(b!=null){
// System.out.print(b.val+" ");
// b=b.next;
// }
// }
}