import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    public ListNode mergeEnergyValues (ListNode l1, ListNode l2) {
	  // temp相当于一个头结点
        ListNode temp = new ListNode(-1);
	  // 把temp的地址赋给cur,让cur结点去做连接结点的操作,最后返回temp.next即可(3) 因为头结点.next就是第一个需要的节点
        ListNode cur = temp;
	  // 循环条件(1):当两个链表都不为null才进去循环,只要有一个走完了,直接跳出循环,然后将next指针指向没走完的那个链表也就是(2)
        while(l1!=null&&l2!=null){ // (1)
            int val;
		  // 因为题目要求降序,选择值大的那个链表,选择哪个链表,哪个链表的结点向后走一步
            if(l1.val>l2.val){
                val = l1.val;
                l1 = l1.next;
            }else{
                val = l2.val;
                l2 = l2.next;
            }
		  // 利用cur进行结点连接
            cur.next = new ListNode(val);
		  // cur向后走一步,进行下一步连接的准备
            cur = cur.next;
        }
	  // 根据null判断哪个链表已经走到了尾部,选择另外一个没有走完的链表即可,可以写成if语句
        cur.next  = l1==null?l2:l1; // (2)
        return temp.next; // (3)
    }
}

本题知识点分析:

1.链表遍历

2.前驱结点和后继结点

3.头结点

4.类似双指针比较

本题解题思路分析:

1.利用选择较大值作为遍历的节点,然后进行连接。

2.关键点注意根据null判断链表是否已经走到尾部,然后链接另外一个没有走完的链表即可。

本题使用编程语言: Java

如果您觉得这篇文章对您有帮助,可以点个赞支持一下,感谢~