考察知识点: 链表

题目分析:

 可以新建一个head节点,方便处理l1l2nullptr的情况。整体思路就是比较两个链表指针所指向的值,将值大的放到新链表的末尾,之后更新指针。

 例如链表{4,5,3,5,4}{4,8,1,6,4}

alt

新链表:

alt

 如果l1所指向的值大于等于l2所指向的值,那么就将l1插入到新链表,反之将l2插入到新链表。一开始l1和l2所指向的值均为4,故将l1插入到新链表;然后l1的值为5,l2的值仍为4,将l1插入到新链表。

alt

 直到l1或l2指向了nullptr时,将非空的链表直接插入到新链表。

所用语言: C++

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param l1 ListNode类
     * @param l2 ListNode类
     * @return ListNode类
     */
    ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2) {
        // write code here
        ListNode head(-1);
        ListNode* p = &head;
        while (l1 && l2) {
            if (l1->val >= l2->val) {
                p->next = l1;
                l1 = l1->next;
            } else {
                p->next = l2;
                l2 = l2->next;
            }
            p = p->next;
        }
        if (l1) p->next = l1;
        if (l2) p->next = l2;
        return head.next;
    }
};