【数据结构】单链表的按位查找(带头结点的和不带头结点的)和按值查找

需求:查找第i个位置的结点

  • 带头结点的
    思路:带头结点,那头结点就是第0个位置,那就是要从第0个开始遍历
// LNode *表示GetElem这个函数最后要返回一个LNode类型的指针
LNode *GetElem(LinkList L, int i) {
	if(i<0) {
		return NULL;		// 带头结点就说明最小位序是第0个,<0显然不合法;至于插入结点为什么是<1,那是因为:头结点不存储数据,i<1才能获取到i-1=0的位置,在i=0后面插入,如果i<0,i-1的时候根据没有i-1=-1的位置
	}
	LNode *p;
	int j=0;
	p=L;
	while(p!=NULL && jnext;
		j++;
	}
	return p;
} 
  • 不带头结点的
    不带头结点就说明没有i=0的位置,从1开始找,类似上面代码
  1. 按值查找
    需求:找单链表中数据域为e的结点
  • 带头结点的
LNode *LocateElem(LinkList L, int e) {
	LNode *p=L->next;		// L是头指针,指向链表第一个结点,链表带头结点就指向头结点,L->next表示头指针指向的结点的指针域,即头结点的指针域,头结点的指针域指向下一节点,存储着下一结点的地址,所以L->next就等同于链表第一个实际结点,将其赋值给指针变量p
	while(p!=NULL && p->data!=e) {
		p=p->next;
	}
	if(p==NULL) {
		return NULL;
	}
	return p;
}
  • 不带头结点的
LNode *LacateElem(LinkList L, int e) {
	LNode *p=L;		// 不带头结点的单链表,头指针L指向链表的第一个实际结点,赋值给指针变量p,就表示p结点的指针域指向链表的第一个实际结点
	while(p!=NULL && p->data!=e) {
		p=p->next;
	}
	if(p==NULL) {
		return NULL;
	}
	return p;
}

你可能感兴趣的:(数据结构,数据结构)