The___Shy_ 2023-04-08 18:54 采纳率: 57.1%
浏览 5

指针、引用、一级指针、二级指针问题

#问题
删除链表中相同元素时,采用delete_x1(Node** L,int x),能正常删除元素,并且不会断链,但使用delete_x1(Node* L,int x),不能正常删除元素,会造成断链

#include<iostream>
using namespace std;
struct Node{
    int val;
    Node* next;
    Node():next(NULL){}
    Node(int val):val(val),next(NULL){}
};
void delete_x1(Node*& L,int x){
    if(L == NULL)return;
    Node* p;
    if(L->val == x){
        p=L;
        L=L->next;
        free(p);
        delete_x1(L,x);
    }else{
        delete_x1(L->next,x);
    }
}
void delete_x2(Node* L,int x){
    if(L == NULL)return;
    Node* p;
    if(L->val == x){
        p=L;
        L=L->next;
        free(p);
        delete_x2(L,x);
    }else{
        delete_x2(L->next,x);
    }
}
int main()
{
    Node* head = new Node(1);
    Node* p = head;
    Node* p1 = head;
    //头插法插入结点 
    for(int i=2;i<=4;i++){
        Node* tmp = new Node(i);
        tmp->next = head->next;
        head->next = tmp;
    }
    //头插法插入结点 
    Node* t1 = new Node(2);
    t1->next = head->next;
    head->next = t1;
    //头插法插入结点 
    Node* t2 = new Node(2);
    t2->next = head->next;
    head->next = t2;
    cout<<"删除前:";
    while(p!=NULL){
        cout<<p->val<<" ";
        p=p->next;
    }
    delete_x1(head,2);    //采用二级指针,不会断链? 
//    delete_x2(head,2); 采用一级指针,会断链? 
    cout<<"删除后:";
    while(p1!=NULL){
        cout<<p1->val<<" ";
        p1=p1->next;
    }
    return 0;
}

请问为什么使用函数 delete_x1(Node*& L,int x) 可以正常删除,不会造成断链
函数delete_x1 运行结果

img

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2023-04-08 19:11
    关注

    传入函数参数,都是复制,所以传入指针,等于复制一个指针。你修改指针指向的东东,函数结束后自然会有效果,而修改指针本身,因为是复制所以,函数结束后,原来的参数不会改变。
    传二级指针,那么修改的其实是那个二级指针指向的一级指针,自然会有效果

    评论

报告相同问题?

问题事件

  • 修改了问题 4月8日
  • 创建了问题 4月8日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析