分隔链表

题目形容:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都呈现在 大于或等于 x 的节点之前。

你该当 保留 两个分区中每个节点的初始绝对地位。

示例阐明请见LeetCode官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:链表遍历

申明2个链表lessThan和moreThan别离寄存小于x的节点和不小于x的节点,而后2个指针curLess和curMore别离指向lessThan和moreThan的头节点,而后遍历链表head:

  • 如果以后节点小于x,则将以后节点增加到lessThan链表中;
  • 如果以后节点不小于x,则将以后节点增加到moreThan链表中。

链表head遍历实现后,将lessThan和moreThan的尾结点都指向null,避免出现多余的节点,而后将lessThan的尾结点指向moreThan的头结点(行将小于x的节点挪到不小于x的节点的后面),最初返回lessThan的next节点即为最初后果。

public class LeetCode_086 {    public static ListNode partition(ListNode head, int x) {        // 小于x的链表节点        ListNode lessThan = new ListNode(-1);        // 不小于x的链表节点        ListNode moreThan = new ListNode(-1);        ListNode curLess = lessThan, curMore = moreThan;        while (head != null) {            if (head.val < x) {                // 小于x的节点增加到链表lessThan中                curLess.next = head;                curLess = curLess.next;            } else {                // 不小于x的节点增加到链表moreThan中                curMore.next = head;                curMore = curMore.next;            }            head = head.next;        }        // 所有节点遍历实现后将lessThan和moreThan尾结点指向null        curLess.next = null;        curMore.next = null;        // 将小于x的节点挪到不小于x的节点的后面        curLess.next = moreThan.next;        return lessThan.next;    }    public static void main(String[] args) {        ListNode head = new ListNode(1);        head.next = new ListNode(4);        head.next.next = new ListNode(3);        head.next.next.next = new ListNode(2);        head.next.next.next.next = new ListNode(5);        head.next.next.next.next.next = new ListNode(2);        ListNode result = partition(head, 3);        while (result != null) {            System.out.print(result.val + " ");            result = result.next;        }    }}
【每日寄语】 这毕生,崎岖太多了,艰难也太多了,但人的潜能是有限的,永远不要在艰难的时候想这就是本人最艰难的时候,只有你咬紧牙根保持,你的幻想就会成真。