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
如果您觉得这篇文章对您有帮助,可以点个赞支持一下,感谢~