题目:https://oj.leetcode.com/problems/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
.
源码:Java版本
算法分析:时间复杂度O(n),空间复杂度O(1)。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head==null) {
return null;
}
ListNode leftHead=null,rightHead=null,leftCur=null,rightCur=null;
for(ListNode node=head;node!=null;node=node.next) {
if(node.val<x) {
if(leftHead==null) {
leftHead=leftCur=node;
}else {
leftCur.next=node;
leftCur=node;
}
}else {
if(rightHead==null) {
rightHead=rightCur=node;
}else {
rightCur.next=node;
rightCur=node;
}
}
}
if(leftCur!=null) {
leftCur.next=rightHead;
}
if(rightCur!=null) {
rightCur.next=null;
}
return leftHead!=null?leftHead:rightHead;
}
}