DS-5-单链表的两种查找实现
按位查找:
依次循环找到第i-1个结点在上一篇按位插入元素的部分已经写过了,这里也是一样的,只不过把i-1改成了i
//按位查找,返回第i个元素(带头结点) LNode * GetElem(LinkList L, int i) { if (i < 0) return NULL; LNode *p; //p指向当前扫描到的结点 int j = 0; //当前p指向的是第几个结点 p = L; //L指向头结点,第0个结点 while (p != NULL && j < i) { //循环找到第i个结点 p = p->next; j++; } return p; } //如果i值不合法则返回的值为NULL
那么现在之前的插入元素的代码查找第i-1个部分即可调用这个查找函数:
//在第i个位置插入元素e bool ListInsert(LinkList &L, int i, char e) {
if (i < 1) return false;
LNode *p = GetElem(L, i-1);
return InsertNextNode(p,e);
}
按值查找:
//按值查找,找到数据域==e的结点 LNode *LocateElem(LinkList L, char e) { LNode *p = L->next; while (p != NULL && p->data != e)//从第1个结点开始查找数据域为e的结点 p=p->next; return p; //找到后返回该结点指针,否则返回NULL }
求表的长度:
//求表的长度 int Length(LinkList L) { int len = 0; //统计表长 LNode *p = L; while (p->next != NULL) { p = p->next; len++; } return len; }