题解 | #合并两群能量值#

合并两群能量值

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
        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
#链表节点移动#
线性表基础 文章被收录于专栏

链表、递归、栈

全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
gcniz:一天写两千行你闹呢
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务