【发布时间】:2012-08-08 19:01:45
【问题描述】:
static void just_traverse(sll **head_ref) {
sll *first = *head_ref;
sll *second = (*head_ref)->next;
if(second == NULL) {
return;
}
just_traverse(&(second));
*head_ref = second;
printf("%d \t",second->payload);
}
在上面的代码中,如果我删除 *head_ref = second;我得到关于堆栈的输出但是如果我把这条线 *head_ref = second;它总是打印最后一个元素说 {4,3,2,1} 然后它总是打印 1?谁能解释为什么?
【问题讨论】:
-
你想达到什么目的?如果您只是遍历,为什么要通过 ** 而不是 sll * ? sll的定义是什么?
-
这段代码是递归反向链表的一部分。谁能告诉我为什么“第二”指针永远不会改变
-
如果你真的需要反转而不仅仅是以相反的顺序输出值。我在答案中发布了您需要在程序中进行的一些更改。
标签: c algorithm pointers linked-list stack-trace