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;
}

 

posted @ 2020-06-16 21:24  swefii  阅读(247)  评论(0编辑  收藏  举报