链表的指针指向问题(本人纯通过刷题了解链表,还没有正式开始学习)
    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是已知链表

c++

1个回答

假设
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
qq_43144144
1999的岁月 哦,有点明白了,这跟以前的*和&有区别,链表的val是蕴含在本身的地址中的,链表只有本身的地址和next的地址,还是要多学学。。。
11 个月之前 回复
adgentleman
adgentleman 回复1999的岁月: 评论写不下,你看我给你的回复吧
11 个月之前 回复
adgentleman
adgentleman 回复1999的岁月: 两个指针指向同一个地址,是说如果这个地址的值变了,那么这些指针指向的值都会变。
11 个月之前 回复
qq_43144144
1999的岁月 代码的话,我截取的是自己写的一个部分。。。可能有点前言不搭后语
11 个月之前 回复
qq_43144144
1999的岁月 指针相等的意思不就是两个地址是相同的吗,一个变了另一个就要跟着变,head地址变为0x2000,temp->next就要跟着变不是吗?
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐