Pregunta de LeetCode 21: fusionar dos listas enlazadas ordenadas fusionar dos listas enlazadas ascendentes en una nueva lista enlazada ascendente y regresar. La nueva lista enlazada se compone de empalmar todos los nodos de las dos listas enlazadas dadas.

  1. Fusionar dos
    listas enlazadas ordenadas Combine dos listas enlazadas ascendentes en una nueva lista enlazada ascendente y regrese. La nueva lista enlazada se compone de empalmar todos los nodos de las dos listas enlazadas dadas.

Ejemplo 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2
输入:l1 = [], l2 = []
输出:[]
示例 3
输入:l1 = [], l2 = [0]
输出:[0]
 

rápido:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

Código:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    
    public ListNode mergeTwoLists(ListNode headA, ListNode headB) {
    
    //两个链表头分别headA,headB;
        ListNode newHead = new ListNode(-1);//定义一个傀儡节点
        ListNode tmp =newHead;//定义一个移动的节点tmp保存往傀儡节点后面拼接的节点此时位置在傀儡节点
        while(headA !=null && headB != null){
    
    //两个都不为空
            if(headA.val > headB.val){
    
    //判断链表头val的大小
                tmp.next = headB;//保存headB
                headB = headB.next;//headB后移一位
                tmp = tmp.next;//tmp也后移一位
            }else{
    
    //headB.val大
                tmp.next = headA;//保存headA
                headA = headA.next;//headA后移一位
                tmp = tmp.next;//tmp后移一位
            }
        }
        if(headB != null){
    
    //headB为空
            tmp.next =headB;//直接是headB链表
        }
        if(headA != null){
    
    //headA为空
            tmp.next =headA;//直接是headA链表
        }
        return newHead.next;//返回链表的头,傀儡节点的下一个;
    }
}

El resultado pasó

Supongo que te gusta

Origin blog.csdn.net/weixin_44436675/article/details/112460711
Recomendado
Clasificación