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

本文介绍了一种高效查找链表中倒数第k个结点的算法,通过定义两个指针,先让一个指针移动k步,然后两个指针同步移动,当先移动的指针到达链表尾部时,另一个指针正好位于倒数第k个结点处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法的基本设计思想:定义两个指针变量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;
  }
}

 

转载于:https://www.cnblogs.com/zhuxuan1997/p/10678941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值