题解 | #合并两群能量值#
合并两群能量值
https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec
/**
* 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
//合法性:
if(l1==nullptr) return l2;
if(l2==nullptr) return l1;
//创建虚拟头节点
ListNode * vul1=new ListNode(0);
vul1->next=l1;
ListNode *p1=l1,*p2=l2,*tem1=nullptr,*tem2=nullptr;
ListNode *pre1=vul1;
while(p1&&p2){
//都插到p1
if(p1->val>=p2->val){
//需要判断p2比p1的下一个还小并且p1的下一个不为空(首先判断)
if(p1->next!=nullptr&&p2->val<p1->next->val){
pre1=p1;
p1=p1->next;
continue;
}
//插到p1前面
tem1=p1->next;
tem2=p2->next;
p1->next=p2;
p2->next=tem1;
pre1=p2;
p1=tem1;
p2=tem2;
cout<<pre1->val;
}
else{
//插到p1后面
tem2=p2->next;
tem1=pre1->next;
pre1->next=p2;
p2->next=tem1;
pre1=p2;
p2=tem2;
cout<<"--"<<pre1->val<<",";
}
}
//p2还有比p1最后一个还小的没插完
if(p2){
pre1->next=tem2;
}
return vul1->next;
}
};
查看25道真题和解析