题解 | #合并两群能量值#
合并两群能量值
https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec
// 用一个新的哨兵头来合并两个链表,分两种情况: // 1, 若链表1的节点大,NewHead的下一个就链接上他,链表1的节点往后走; // 2, 若链表2的节点大,NewHead的下一个就链接上他,链表2的节点往后走; // 3, 新链表的节点也需要往后走,然后重复1和2的步骤,直至链表1或2走完; // 4, 需要考虑两个极端,1是两个子链表其中一个走完,就衔接另外一个链表; // 2是,其中可能存在子链表空。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2) { // 用一个新的哨兵头来合并两个链表,分两种情况: // 1, 若链表1的节点大,NewHead的下一个就链接上他,链表1的节点往后走; // 2, 若链表2的节点大,NewHead的下一个就链接上他,链表2的节点往后走; // 3, 新链表的节点也需要往后走,然后重复1和2的步骤,直至链表1或2走完; // 4, 需要考虑两个极端,1是两个子链表其中一个走完,就衔接另外一个链表; // 2是,其中可能存在子链表空。 ListNode* NewHead = new ListNode(0); ListNode* act = NewHead; ListNode* moveH1 = l1; ListNode* moveH2 = l2; if(l1 == nullptr){ return l2; } // 其中一个为空的处理 else if(l2 == nullptr){ return l1; } else { // 比较两个子链表,优先衔接节点值大的点 while(moveH1 && moveH2){ if(moveH1->val > moveH2->val){ act->next = moveH1; moveH1 = moveH1->next; }else { act->next = moveH2; moveH2 = moveH2->next; } act = act->next; } // 轮循完其中一个子链表后,衔接剩下的另外一个子链表 if(moveH1 == nullptr){ act->next = moveH2; } else { act->next = moveH1; } return NewHead->next; } } };