// 用一个新的哨兵头来合并两个链表,分两种情况:
// 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;
}
}
};