class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
ListNode *m=new ListNode(0),*p=m;
while(pHead1&&pHead2){
if(pHead1->val<=pHead2->val){
p->next=pHead1;
pHead1=pHead1->next;
}
else{
p->next=pHead2;
pHead2=pHead2->next;
}
p=p->next;
}
if(pHead1) p->next=pHead1;
if(pHead2) p->next=pHead2;
return m->next;
}
};
为什么另用一个p指针进行操作,而用m指针操作会错误
关于#c++#的问题:而用m指针操作会错误
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注【以下回答由 GPT 生成】
问题分析:
从代码中看,p 指针和 m 指针在初始时是指向同一个节点的,也就是头节点。而在循环过程中,p 指针会不断的向后移动,而 m 指针没有移动。这样导致最后返回的是 m 的下一个节点,而不是 p 的下一个节点。所以结果是错误的。
解决方案:
可以简单的将 m 指针改为 p 指针,这样就可以正确返回 p 的下一个节点。
代码修改:
class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode *p=new ListNode(0),*q=p; while(pHead1 && pHead2){ if(pHead1->val <= pHead2->val){ q->next=pHead1; pHead1=pHead1->next; } else{ q->next=pHead2; pHead2=pHead2->next; } q=q->next; } if(pHead1) q->next=pHead1; if(pHead2) q->next=pHead2; return p->next; } };这样修改后就可以得到正确的结果了。
【相关推荐】
- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7696681
- 这篇博客你也可以参考下:判断m到n之间有多少个奇数,多少个偶数(c++)
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报