class Solution { public ListNode partition(ListNode head, int x) { // 初始化两个链表的头节点和尾节点,分别用于存储小于x和大于等于x的节点 ListNode leftHead = null, leftTail = null; ListNode rightHead = null, rightTail = null; // 临时变量,用于遍历原链表 ListNode next = null; // 遍历原链表 while (head != null) { // 保存当前节点的下一个节点 next = head.next; // 断开当前节点与原链表的联系 head.next = null; // 判断当前节点的值是否小于x if(head.val < x) { // 如果leftHead为空,说明这是第一个小于x的节点,将其设置为leftHead if(leftHead == null) { leftHead = head; }else{ // 否则将当前节点添加到leftTail后面 leftTail.next = head; } // 更新leftTail为当前节点 leftTail = head; }else { // 如果rightHead为空,说明这是第一个大于等于x的节点,将其设置为rightHead if(rightHead == null) { rightHead = head; }else{ // 否则将当前节点添加到rightTail后面 rightTail.next = head; } // 更新rightTail为当前节点 rightTail = head; } // 移动到下一个节点 head = next; } // 如果leftHead为空,说明所有节点都大于等于x,直接返回rightHead if (leftHead == null) { return rightHead; } // 将leftTail与rightHead连接起来,形成新的链表 leftTail.next = rightHead; // 返回新链表的头节点 return leftHead; } }
力扣86.分割链表
最新推荐文章于 2024-11-07 23:24:07 发布