程序员经典1 双向链表的查找节点。考点:双向链表的操作出现频率:★★★★解析:使用 right 指针遍历,直至找到数据为 data 的节点,假如找到节点,返回节点,否则返回NULL。1 //查找节点,成功则返回满足条件的节点指针,否则返回 NULL2 DbNode *FindNode(DbNode *head, int data) //参数 1 是链表的表头节点3 { //参数 2 是要查找的节点,其数据为 data4 DbNode *pnode = head;56 if (head == NULL) //链表为空时返回 NULL7 {8 return NULL;9 }1011 /*找到数据或者抵达链表末尾退出 while 循环*/12 while (pnode->right != NULL && pnode->data != data)13 {14 pnode = pnode->right; //使用 right 指针遍历15 }1617 //没有找到数据为 data 的节点,返回 NULL18 if (pnode->right == NULL)19 {20 return NULL;21 }2223 return pnode;24 }2 考点:模板的特化的理解出现频率:★★★解析:模板的特化(template specialization)分为两类:函数模板的特化和类模板的特化。(1)函数模板的特化:当函数模板需要对某些类型进行尤其处理,称为函数模板的特化。例如:1 bool IsEqual(T t1, T t2)2 {3 return t1 == t2;4 }56 int main()7 {8 char str1[] = "Hello";9 char str2[] = "Hello";10 cout << IsEqual(1, 1) << endl;11 cout << IsEqual(str1, str2) << endl; //输出 012 return 0;13 }代码 11 行比较字符串与否相等。由于对于传入的参数是 char *类型的,max 函数模板只是简单的比较了传入参数的值,即两个指针与否相等,因此这里打印 0。显然,这与我们的初衷不符。因此,max 函数模板需要对 char *类型进行尤其处理,即特化:1 template <>2 bool IsEqual(char* t1, char* t2) //函数模板特化3 {4 return strcmp(t1, t2) == 0;5 }这样,当 IsEqual 函数的参数类型为 char* 时,就会调用 IsEqual 特化的版本,而不会再由函数模板实例化。(2)类模板的特化:与函数模板类似,当类模板内需要对某些类型进行尤其处理时,使用类模板的特化。例如:1 template2 class compare3 {4 public:5 bool IsEqual(T t1, T t2)6 {7 return t1 == t2;8 }9 };1011 int main()12 {13 char str1[] = "Hello";14 char str2[] = "Hello";15 compare c1;16 compare c2;17 cout <...