查找单链表中倒数第K个位置上的结点,若查找成功返回该节点的data域,若不成功只返回0

算法的基本设计思想:定义两个指针变量p和q  初始时均指向头结点的下一个结点(即链表的第一个结点)p沿链表移动,当p移动到第k个结点时,q指针开始与p指针同时移动,当p指针移动到最后一个结点时,q指针所指示结点为倒数第k个结点

 typedef struct LNode{
    int data;
    struct LNode* next;
}LNode, *Linklist;

int search_k(Linklist  list  ,  int k) {
  LNode *p = list->next; LNode *q = list->next;        //初始化两个指向链表第一个节点的指针
   int count=0;
  while(p!=NULL){
    if(count<k)  count++;       //当走了count 加个k个之后,q指针才开始移动
    else  q=q->next;
    
    p=p->next;         //p指针一直迭代下去
  }
  
  if(count<k)
    return 0;          //   k值太大,q指针根本没有移动,返回错误
  else{
    printf("%d" , q->data);
    return 1;
  }
}

猜你喜欢

转载自www.cnblogs.com/zhuxuan1997/p/10678941.html