这是一个面试问题,我想我会和你们分享的。
如何在不使用“if”的情况下有效地添加到链表的尾部?
从该函数中删除if。(?
仍然是一个if
)。
typedef struct tNode_ tNode;
struct tNode_ {
tNode* pNext;
int data;
};
tNode* pHead = NULL;
tNode* pTail = NULL;
AddTail(tNode* pNode){
if(!pTail) {
pHead = pNode;
}
else {
pTail->pNext = pNode;
}
pTail = pNode;
pTail->pNext = NULL;
}
最佳答案
一种(无可否认的愚蠢)方法是使用短路逻辑运算符&&
和||
的行为。例如,您可以执行以下操作:
AddTail(tNode* pNode){
pTail || (pHead = pNode);
!pTail || (pTail->pNext = pNode);
pTail = pNode;
pTail->pNext = NULL;
}
这是因为如果
ptail
为空,第一条语句的第一部分将计算为false,从而强制计算||
语句的后半部分。如果不为空,则不计算语句的后半部分。类似的逻辑也适用于下一个语句。也就是说,这是一个非常愚蠢的面试问题,我真的不知道他们在问什么。就我个人而言,我会质疑是否有人会试图评估你编写这样代码的能力。
希望这有帮助!