1999的岁月 2019-07-13 14:48 采纳率: 100%
浏览 308
已采纳

链表的指针指向问题(本人纯通过刷题了解链表,还没有正式开始学习)

    ListNode* map=new ListNode(0);
    while(head!=NULL){
        ListNode* temp=map;
        ListNode* head2=head->next;//记录后结点,防止插入时被改
        while(temp->next!=NULL){
            temp=temp->next;
        }
        head->next=temp->next;
        temp->next=head;//插入
        head=head2;
    }

上面的代码中temp->next已指向head的地址,但head的地址马上就改变了,那temp->next指向了新的地址,有什么意义呢?但跑的时候,却发现temp->next没有改变。
BTW:head是已知链表

  • 写回答

1条回答

  • adgentleman 2019-07-15 15:51
    关注

    假设
    head=0x1000;
    head2=0x2000;
    语句temp->next=head; //相当于temp->next=0x1000
    语句head=head2; //相当于head=0x2000
    这是从纯语法上来说的

    我个人感觉你的这个插入函数有问题,请问你的这个函数是想要把
    新建立的map插入到已经存在的head这个链表里面吗?如果是这样,
    那么应该这么写:
    ListNode* map=new ListNode(0);
    ListNode* temp=head;
    if(temp==NULL)
    {
    head=map;
    head->next=NULL;
    return;
    }
    while(temp->next!=NULL){
    temp=temp->next;
    }
    temp->next=map;//插入
    map->next=NULL;

        //评论下不下,写这里了
        head=0x1000; 
        head2=0x2000; 
        temp->next=head; //相当于temp->next=0x1000
        head=head2; //相当于head=0x2000  ,这时候temp->next还是指着0x1000(也就是执行赋值语句时p1的值)。 赋值语句只是把一个变量的值传递给另一个变量,两个变量并没有特别的动态关系(也就是执行赋值之后,一个变量变了,另一个变量不会跟着变)。
        再举一个简单的例子:
        int a=1;
        int b=a;
        a=2;
        //这时候b=1,a=2
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿