按位序查找
由于链表是链式存储,所以如果我们要查找某一个结点,也需要借助头指针一个一个的遍历下去。
代码:
int LinkedListFind(LinkedList L, int x)
{
Node* ret;
int num;
num = 1;
L = L->next;
while (L != NULL)
{
ret = L;
if (ret->data == x)
{
cout << "找到第一个数据域为" << x << "的元素,他是链表中的第" << num << "个元素。" << endl;
return num;
}
L = L->next;
num++;
}
cout << "未找到该元素!" << endl;
return -1;
}
首先,这个函数的返回类型是int,
我让返回值的结果是位序,如果没有查找到,就返回-1,因为位序不可能是负数。
还是和回收的想法一样,
建立一个临时指针变量ret,和L共同操纵链表。
还定义了一个计数器,初值为1,代表第x个元素位序。
我们先让L = L->next,
因为头结点的数据域没有意义。
然后进行一个while循环:
只要L不是NULL,就循环下去。
先让ret = L,
然后判断ret的数据域,
如果满足,直接返回位序;
如果不满足,让L指向下一个结点,
直到查找到了某个元素或者L到达了链表的尽头。
测试代码:
int main()
{
cout << "请输入单链表的数据:";
LinkedList list,start;
list = LinkedListCreatT();
//LinkedListDelete(list, 3);
for (start = list->next; start != NULL; start = start->next)
{
cout << start->data<<endl;
}
LinkedListFind(list, 6);
LinkedListFree(list);
if (list == NULL)
{
cout << "链表已释放完毕" << endl;
}
return 0;
}
运行截图:
查找数据域为6的第一个元素
时间复杂度
由于不管是顺序存储还是随机存储,
我们只有头指针,