c++数据结构指针问题(就地逆置)
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/08/17 11:18:03
c++数据结构指针问题(就地逆置)
p=head;
while(head->next!=NULL)
{
q=p;结点赋结点什么意思?
p=head->next;指针赋结点什么意思?
head->next=p->next;指针赋指针什么意思?
p->next=q;
}
head=p;
p=head;(求每一句的解释)
p=head;
while(head->next!=NULL)
{
q=p;结点赋结点什么意思?
p=head->next;指针赋结点什么意思?
head->next=p->next;指针赋指针什么意思?
p->next=q;
}
head=p;
p=head;(求每一句的解释)
![c++数据结构指针问题(就地逆置)](/uploads/image/z/5844219-51-9.jpg?t=c%2B%2B%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%8C%87%E9%92%88%E9%97%AE%E9%A2%98%EF%BC%88%E5%B0%B1%E5%9C%B0%E9%80%86%E7%BD%AE%EF%BC%89)
说明你对指针的理解不太清楚.
为了叙述下面的代码,我先解释指针间用等号赋值是什么意思.指针保存的其实就是一个地址,p=q表示把q的地址赋值给p,结果是p和q都指向同一块地址.我这里先不说代码的正确与否.
操作前,假设指针是这样的,因为我不知道你之前的链表状态,可能有错.代码里关于链表结构的描述都是第一次循环的结果,以后的结构可以类推
head->node1->node2->node3
p=head;//把head的地址赋值给p,现在p指向的就是head的地址了,即p现在指向链表的头部.
while(head->next!=NULL)
{
q=p;结点赋结点什么意思?
无论这个指针指向的是int,是struct,是class或者其他什么,
只要是个指针,他就是一个地址,所以q=p就是把p地址的值传给了q,即q现在和p指向同一个结点的地址.
p=head->next;指针赋结点什么意思?
这个说法有问题了,next也是一个指针,这个和上面的没有区别,只不过next这个指针保存在head所指的这个结构体里面而已.即p现在指向头部的下一个结点.
head->next=p->next;指针赋指针什么意思?p已经是head的下一个结点了,那再取next意思就是head的下下个结点,然后赋值给head的next指针.即改变了链表结构,把head的下一个结点从链表中删除了,后面一句就是把这个结点添加到head前面.
现在的链表结构是 head->node2->node3 同时node1->node2
p->next=q;
把刚才删除的结点(紧靠head的结点插入到了head前面),现在结构是node1->head->node2->node3
}
head=p;
p=head;//这两句就是把p指向了head,由于最后p是最后插到前面的node,所以作为了新的head
这样循环的结构是,第i次循环nodei就跑到了head前面了,直到head后面没有node了,例如第2次循环结果是node2->node1->head->node3
整个循环的作用就是把链表的顺序倒过来了.
为了叙述下面的代码,我先解释指针间用等号赋值是什么意思.指针保存的其实就是一个地址,p=q表示把q的地址赋值给p,结果是p和q都指向同一块地址.我这里先不说代码的正确与否.
操作前,假设指针是这样的,因为我不知道你之前的链表状态,可能有错.代码里关于链表结构的描述都是第一次循环的结果,以后的结构可以类推
head->node1->node2->node3
p=head;//把head的地址赋值给p,现在p指向的就是head的地址了,即p现在指向链表的头部.
while(head->next!=NULL)
{
q=p;结点赋结点什么意思?
无论这个指针指向的是int,是struct,是class或者其他什么,
只要是个指针,他就是一个地址,所以q=p就是把p地址的值传给了q,即q现在和p指向同一个结点的地址.
p=head->next;指针赋结点什么意思?
这个说法有问题了,next也是一个指针,这个和上面的没有区别,只不过next这个指针保存在head所指的这个结构体里面而已.即p现在指向头部的下一个结点.
head->next=p->next;指针赋指针什么意思?p已经是head的下一个结点了,那再取next意思就是head的下下个结点,然后赋值给head的next指针.即改变了链表结构,把head的下一个结点从链表中删除了,后面一句就是把这个结点添加到head前面.
现在的链表结构是 head->node2->node3 同时node1->node2
p->next=q;
把刚才删除的结点(紧靠head的结点插入到了head前面),现在结构是node1->head->node2->node3
}
head=p;
p=head;//这两句就是把p指向了head,由于最后p是最后插到前面的node,所以作为了新的head
这样循环的结构是,第i次循环nodei就跑到了head前面了,直到head后面没有node了,例如第2次循环结果是node2->node1->head->node3
整个循环的作用就是把链表的顺序倒过来了.