美文网首页
按值分割链表

按值分割链表

作者: 眼若繁星丶 | 来源:发表于2021-01-03 10:37 被阅读0次

按值分割链表

spyJ3Q.png

dummy头结点

本题使用含有dummy头的两个链表,分别储存小于x和大于等于x的节点,最后再合并两个节点即可。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode dummySmall = new ListNode(-1);
        ListNode dummyLarge = new ListNode(-1);
        dummyLarge.next = head;
        dummySmall.next = head;
        ListNode pSmall = dummySmall, pLarge = dummyLarge;
        while (head != null) {
            if (head.val < x) {
                pSmall.next = head;
                pSmall = pSmall.next;
            } else {
                pLarge.next = head;
                pLarge = pLarge.next;
            }
            head = head.next;
        }
        pLarge.next = null;
        pSmall.next = null;
        ListNode dummyRes = mergeList(dummySmall, dummyLarge);
        return dummyRes.next;
    }

    // 合并左链表和右链表,l1在前,l2在后
    public static ListNode mergeList(ListNode l1, ListNode l2) {
        ListNode p = l1;
        while (p.next != null) {
            p = p.next;
        }
        // 大链表l2开头是前面new的一个值为-1的节点,连接两个dummy链表,
        // 只保留前面l1的dummy头,l2的dummy头不要,所以连接l2.next
        p.next = l2.next;
        return l1;
    }
}

相关文章

网友评论

      本文标题:按值分割链表

      本文链接:https://www.haomeiwen.com/subject/yyduoktx.html