c++数据结构指针问题(就地逆置)

问题描述:

c++数据结构指针问题(就地逆置)
p=head;
while(head->next!=NULL)
{
q=p;结点赋结点什么意思?
p=head->next;指针赋结点什么意思?
head->next=p->next;指针赋指针什么意思?
p->next=q;
}
head=p;
p=head;(求每一句的解释)
1个回答 分类:综合 2014-10-22

问题解答:

我来补答
说明你对指针的理解不太清楚.
为了叙述下面的代码,我先解释指针间用等号赋值是什么意思.指针保存的其实就是一个地址,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
整个循环的作用就是把链表的顺序倒过来了.
 
 
展开全文阅读
剩余:2000
下一页:老师第一十三题