给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
不需要 保留 每个分区中各节点的初始相对位置。
public ListNode partition(ListNode head,int x){ //创建small和big两个小链表的虚拟头结点 ListNode smallHead = new ListNode(-1); ListNode bigHead = new ListNode(-1); //按照升序插入,因此需要尾插 //分别指向两个子链表的尾部 ListNode smallTail = smallHead; ListNode bigTail = bigHead; //遍历原链表,根据值将结点依次放在两个子链表中 while(head != null){ //值小于x。放在small链表中 if(head.val < x){ smallTail.next = head; smallTail = head; }else{ //值大于x。放在big链表中 bigTail.next = head; bigTail = head; } head = head.next; } bigTail.next = null; //拼接小链表与大链表 smallTail.next = bigHead.next; return smallHead.next; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)