@江户川柯南_qq 不是视频错了,是你错了,我给你捋一下,捋之前改个名,p1, p2 太乱了,p1 改叫 pCurrOne,p2 改叫 pPrevOne。
最后一次是判断 price,假设最后一次输入的 price 是 0, 那么在最后一次的下一次循环判断就不会通过,那么最后一次也就是 pCurrOne 就直接作废(视频这里忘了 free() ),而 pPrevOne 将作为真正的最后一个,所以是 pPrevOne -> next = NULL;
最后一次是判断 price,假设最后一次输入的 price 是 0, 那么在最后一次的下一次循环判断就不会通过,那么最后一次也就是 pCurrOne 就直接作废(视频这里忘了 free() ),而 pPrevOne 将作为真正的最后一个,所以是 pPrevOne -> next = NULL;
2019-03-09
前面有很多人说最后一个节点是p1,其实并不是,首先p1,p2并不是节点,只是一个临时变量,就像冒泡排序中的tmp,节点是malloc分配的内存块。其次最后一个节点是p2指向的内存块,因为p1是在price不等于0的情况下才追加到p2指向的内存块的next指针中,但是由于判断=0,所以没有追加!!!注意p2并不是节点,p1也不是节点,他们都是指针,都仅仅指向地址,由于最后一个p是指向(0,0),这个内存块并没有追加到上一个内存块的next指针中,而上一个内存块的位置在哪呢?最后一次执行循环的时候,p1把地址给了p2,所以最后一个地址是p2指向的内存块。
2018-12-31
n==0,应该作为一个错误处理或者单独分开返回0才对吧,一个大于0的整数,在递归的过程中是不会有参数为0的情况出现的
2018-11-30