p = L;
while(p && j < i - 1) {
p = p->next;
++j;
}
结束上面的循环有两个条件,一是p == NULL;,此时可能满足j < i - 1;,也可能不满足。二是 j == i - 1,也可能满足 p == NULL;,也可能不满足。
if(!p || j < i - 1) retunr false;
只要满!p,则表明链表指针已经指向NULL,而不是希望的两个链表节点之间,故插入失败。如果满足j < i - 1,此时,可以插入新的节点,如此看来,该句有问题,应该改为if(p == NULL) return false;