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) {
// write code here
if (l1 == null) return l2;
if (l2 == null) return l1;
ListNode head = l1.val >= l2.val ? l1 : l2, p = head, q = p == l1 ? l2 : l1, next;
while (p != null && q != null) {
while (p.next != null && p.next.val >= q.val) p = p.next;
next = p.next;
p.next = q;
p = q;
q = next;
}
return head;
}
}
- 边界值判断,其中一个为null,返回另一个
- 取两个链表中头节点值大的作为新链表的头节点,并定义两个指针 p、q 分别指向一个头节点值较大的,一个头节点值较小的
- 循环开始:只要p、q都不为null,循环继续
- 循环查找 p:只要p的next的值大于q的值,就继续
- 找到后,先记录p的next
- 将p与q连接起来,即 p.next = q
- p 移动到 q 的位置,q移动到 next 的位置
- 循环结束,返回 head