题解 | #合并两群能量值#【Java】
合并两群能量值
https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec?tpId=354&tqId=10590578&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj
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
如果您觉得这篇文章对您有帮助,可以点个赞支持一下,感谢~
高频面试算法题解 文章被收录于专栏
高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

查看5道真题和解析