题目描述:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。应当保留两个分区中每个节点的初始相对位置。
实例:
该题是leetcode的中等题,思路不复杂,先创建两个链表less_head,more_head和两个分别指向less_head和more_head的指针less_ptr和more_ptr,当遍历链表时,当前节点的值小于x的话,less_ptr指向当前节点,并移动到当前节点;当前节点的值大于或等于x的话,more_ptr指向当前节点,并移动到当前节点。遍历完后将两个链表连接起来。
代码如下:
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode less_head = new ListNode();
ListNode more_head = new ListNode();
ListNode less_ptr = less_head;
ListNode more_ptr = more_head;
while(head != null){
if(head.val < x){
less_ptr.next = head;
less_ptr = head;
}else{
more_ptr.next = head;
more_ptr = head;
}
head = head.next;
}
less_ptr.next = more_head.next;
more_ptr.next = null;
return less_head.next;
}
}