题解 | #合并两群能量值# java
合并两群能量值
https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec
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 // 创建哑节点作为合并后链表的头节点 ListNode dummy = new ListNode(-1); ListNode current = dummy; // 通过比较链表节点的值,依次将较大的节点拼接到合并链表中 while (l1 != null && l2 != null) { if (l1.val >= l2.val) { current.next = l1; l1 = l1.next; } else { current.next = l2; l2 = l2.next; } current = current.next; } // 将剩余的节点直接链接到合并链表的末尾 if (l1 != null) { current.next = l1; } if (l2 != null) { current.next = l2; } return dummy.next; } }
考察知识点:
- 链表:链表是一种常见的数据结构,它由节点组成,每个节点包含一个值和一个指向下一个节点的指针。在这个问题中,我们需要对两个链表进行合并操作,因此需要了解链表的基本概念、节点的创建和访问等操作。
- 归并排序:归并排序是一种经典的排序算法,其基本思想是将待排序的序列不断地分割成小的子序列,然后再将这些子序列不断地合并成更大的有序序列。在这个问题中,我们可以借鉴归并排序的思想,将两个非递增的链表合并成一个新的非递增链表。
代码大纲
- 首先定义链表节点的类,包括一个整型值 val 和一个指向下一节点的指针 next。
- 创建一个方法 merge,用于合并两个非递增链表。该方法接受两个链表的头节点作为参数,返回合并后的链表的头节点。
- 在 merge 方法中,创建一个哑节点 dummy 作为合并后链表的头节点,以及一个指针 current 指向当前节点。
- 使用两个指针 l1 和 l2,分别指向给定的两个链表的头节点。
- 在一个循环中,比较 l1 和 l2 当前节点的值,将较大的节点拼接到合并链表中,并更新指针 current 和相应链表的指针。
- 循环结束后,若其中一个链表遍历完了,则将剩余链表的节点直接链接到合并链表的末尾。
- 返回哑节点 dummy 的下一个节点,即为合并后的非递增链表的头节点。
- 编写测试代码,创建两个链表并调用 merge 方法进行合并,然后遍历打印合并后的链表的值,验证结果是否正确。