m0_63042758 2023-09-21 16:24 采纳率: 0%
浏览 3

关于#c++#的问题:而用m指针操作会错误


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指针操作会错误
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-21 18:20
    关注

    【以下回答由 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;
        }
    };
    

    这样修改后就可以得到正确的结果了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日