题解 | #合并两群能量值#
合并两群能量值
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(0); ListNode cur = dummy; while (l1 != null && l2 != null) { if (l1.val >= l2.val) { cur.next = l1; l1 = l1.next; } else { cur.next = l2; l2 = l2.next; } cur = cur.next; } // 将剩余的节点直接添加到新链表的末尾 cur.next = l1 != null ? l1 : l2; // 返回新链表的头节点 return dummy.next; } }
题目考察的知识点:
包括链表操作和合并有序链表。
解题方法分析:
这道题目要求合并两个有序链表,并且合并后的链表也要保持有序。我们可以使用双指针法来实现。
- 创建一个虚拟头节点
dummy
,并用一个指针cur
来表示当前节点,初始时指向虚拟头节点。 - 使用一个循环,遍历两个链表
l1
和l2
,比较当前l1
和l2
节点的值,将较小的值的节点接在cur
节点的后面。 - 然后将
cur
指针移动到新添加的节点上,同时将较小节点的指针向后移动一位。 - 重复步骤2和步骤3,直到其中一个链表遍历完毕。
- 最后,将未遍历完的链表的剩余部分直接连接到合并链表的末尾。
- 返回新链表的头节点,即
dummy.next
。
这样,通过比较节点的值,逐步连接节点,就能够实现合并两个有序链表的操作。
代码中使用了一个dummy
节点作为新链表的起始,然后通过比较l1
和l2
节点的值,逐步连接节点,直到其中一个链表遍历完毕。最后,将剩余的节点连接到合并链表的末尾,返回新链表的头节点。