描述
给出一个链表和一个值,以
为参照将链表划分成两部分,使所有小于
的节点都位于大于或等于
的节点之前。
两个部分之内的节点之间要保持的原始相对顺序。
例如:
给出
返回
示例1
输入:
{1,4,3,2,5,2},3
返回值:
{1,2,2,4,3,5}
分析:
1. 循环两遍,第一遍找小于划分元素的节点,第二遍找大于等于划分元素的节点,放到结果链表里。空间复杂度O(n)。
2. 循环一遍,两个指针,一个找小于的元素更改链接到小于元素链表,另一个找大于等于的元素更改链接到大于等于链表,最后两个结果链表连起来。空间复杂度O(1)。
public class Solution {
/**
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
public ListNode partition (ListNode head, int x) {
// write code here
if(head == null) return head;
if(head.next == null) return head;
ListNode tmp = head;
ListNode res = null;
ListNode result = res;
while(tmp != null){
if(tmp.val < x){
if(res == null){
res = new ListNode(x);
result = res;
}
else{
res.next = new ListNode(x);
res = res.next;
}
res.val = tmp.val;
}
tmp = tmp.next;
}
tmp = head;
while(tmp != null){
if(tmp.val >= x){
if(res == null){
res = new ListNode(x);
result = res;
}
else{
res.next = new ListNode(x);
res = res.next;
}
res.val = tmp.val;
}
tmp = tmp.next;
}
return result;
}
}
提交结果:答案正确 运行时间:27ms 占用内存:10352KB 使用语言:Java 用例通过率:100.00%
public class Solution {
/**
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
public ListNode partition (ListNode head, int x) {
// write code here
if (head == null) return head;
ListNode h1 = new ListNode(0);
ListNode h2 = new ListNode(0);
ListNode n1 = h1;
ListNode n2 = h2;
ListNode tmp = head;
while (tmp != null) {
if (tmp.val < x) {
n1.next = tmp;
n1 = tmp;
} else {
n2.next = tmp;
n2 = tmp;
}
tmp = tmp.next;
}
n2.next = null;
n1.next = h2.next;
return h1.next;
}
}
提交结果:答案正确 运行时间:27ms 占用内存:10256KB 使用语言:Java 用例通过率:100.00%