我需要一些有关列表头移动的帮助..
这是我的教授方法,它可以工作,但我不明白这一点。
我认为每次调用都会更改列表头,但在实际操作中它会移动并指向最后一个元素..对此有什么帮助吗?
非常感谢
void reverserecv2(pt* listhead){
pt curr=*listhead,suiv;
if(curr && curr->next){
suiv=curr->next;
reverse(&(curr->next));
suiv->next=curr;
*listhead=curr->next;
suiv->next->next=NULL;
}
}
// my structure :
typedef struct node{
int data;
struct node* next;
}node;
typedef node* pt ;
答案 0 :(得分:0)
如果您打印出一些数据,它可能会帮助您了解它在做什么;分配了* listhead的位置,放在行中:
printf(“*(%p) = %p\n”, listhead, curr->next);
我做了4个清单:
*(0x79628344) = 0x79628320
*(0x79628354) = 0x79628320
*(0x79628364) = 0x79628320
*(0xbff92bd0) = 0x79628320
我们看到的是列表头本身具有几个不同的值;当我们查看递归调用时,这是有道理的。每次使用 next 作为列表头调用它时,都会更新每个节点。从我的身上可以看到,与其余地址不相邻的地址是最终列表头所在的堆栈地址。