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是已知链表
假设
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