这是一个面试问题,我想我会和你们分享的。
如何在不使用“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,从而强制计算||语句的后半部分。如果不为空,则不计算语句的后半部分。类似的逻辑也适用于下一个语句。
也就是说,这是一个非常愚蠢的面试问题,我真的不知道他们在问什么。就我个人而言,我会质疑是否有人会试图评估你编写这样代码的能力。
希望这有帮助!

09-07 02:22