算法:两个有序链表合并成一个新的有序链表

104 阅读1分钟
static ListNode doubleSortedLinkedListMerge(ListNode head1, ListNode head2) {
    // 如果有一个链表为空,直接返回另外的链表头
    if (head1 == null || head2 == null) {
        return head1 == null ? head2 : head1;
    }

    // 两个节点,值最小的作为大链表的头节点
    ListNode head = head1.value <= head2.value ? head1 : head2;
    ListNode prev = head;
    ListNode first = head.next;
    // 拿到第二个链表的头节点指针
    ListNode second = head == head1 ? head2 : head1;

    while (first != null && second != null) {
        // 分别取两个链表当前的节点值,做比较
        if (first.value <= second.value) {
            // 如果当前节点值小于等于,则当前链表的指针往后面移动
            prev.next = first;
            first = first.next;
        } else {
            prev.next = second;
            second = second.next;
        }
        prev = prev.next;
    }

    prev.next = first == null ? second : first;

    return head;
}