面试题 02.04. 分割链表 * 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。 * 如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可, * 其不需要被置于左右两部分之间。 * 查找每个节点,当当前节点小于目标节点时,将当前节点使用头插法插入到链表头部 * 时间复杂度:O(N) * 空间复杂度:O(1)
public class partition { public static ListNode partition(ListNode head,int x){ if (head==null){ return null; } ListNode dummy=new ListNode(-1); dummy.next=head; ListNode prev=head; head=head.next; while (head!=null){ if (head.val<x){ //让prev指针指向head的下一个节点 prev.next=head.next; //让head的next指向dummy的next head.next=dummy.next; //dummy指针向前移动指向刚刚插入的头结点便于下次插入节点 dummy.next=head; //head指向prev的next head=prev.next; }else { prev=prev.next; head=head.next; } } return dummy.next; } }