jiameng1987 2009-6-30 14:50
C/C++面试题大全 进入名企的敲门砖(连载)
双向链表的查找节点。
考点:双向链表的操作
出现频率:★★★★
解析:
使用right指针遍历,直至找到数据为data的节点,如果找到节点,返回节点,否则返回NULL。
1 //查找节点,成功则返回满足条件的节点指针,否则返回NULL
2 DbNode *FindNode(DbNode *head, int data) //参数1是链表的表头节点
3 { //参数2是要查找的节点,其数据为data
4 DbNode *pnode = head;
5
6 if (head == NULL) //链表为空时返回NULL
7 {
8 return NULL;
9 }
10
11 /*找到数据或者到达链表末尾退出while循环*/
12 while (pnode->right != NULL && pnode->data != data)
13 {
14 pnode = pnode->right; //使用right指针遍历
15 }
16
17 //没有找到数据为data的节点,返回NULL
18 if (pnode->right == NULL)
19 {
20 return NULL;
21 }
22
23 return pnode;
24 }
jiameng1987 2009-6-30 14:52
双向链表的打印。
更多内容请到“融智技术学苑”([url]http://www.rzchina.net[/url])了解。
考点:双向链表的操作
出现频率:★★★★
解析:
与测长的方法一样,使用right指针进行遍历。
1 //打印整个链表
2 void PrintList(DbNode *head) //参数为链表的表头节点
3 {
4 DbNode *pnode = NULL;
5
6 if (head == NULL) //head为NULL表示链表空
7 {
8 return;
9 }
10 pnode= head;
11 while (pnode != NULL)
12 {
13 printf("%d ", pnode->data);
14 pnode = pnode->right; //使用right指针遍历
15 }
16 printf("n");
17 }