分隔链表
题目描述:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于x 的节点都出现在 大于或等于x 的节点之前。你应当 保留两个分区中每个节点的初始相对位置。提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val <= 100-200 <= x <= 200
示例
输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null) return null;
List<ListNode> small = new ArrayList<>();
List<ListNode> big = new ArrayList<>();
for(ListNode node = head ; node != null ; node = node.next){ // 遍历所有节点
if(node.val < x) small.add(node);
else big.add(node);
}
for(int i = 0 ; i<small.size()-1 ; i++){
small.get(i).next = small.get(i+1);
}
if(small.size() != 0){
if(big.size() != 0) small.get(small.size()-1).next = big.get(0);
for(int i = 0 ; i<big.size()-1 ; i++){
big.get(i).next = big.get(i+1);
}
if(big.size() != 0) big.get(big.size()-1).next = null;
return small.get(0);
}else{
return big.get(0);
}
}
}
建立两个数组,一个按照顺序存储小于x的节点,一个存储大于等于x的节点。其余按照题意逻辑即可,详细请看代码。