翼度科技»论坛 云主机 LINUX 查看内容

Practice

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
18.链表只能一个接着一个遍历,不允许通过随机访问

7.链表的地址是连续的,通过内部的指针来进行访问
  1. //假设该链表只给出了头指针 head。在不改变链表的前提下,请设计一个尽可能高效的算法,
  2. //查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的 data值,并返回 1;否则,只返回 0。
  3. int LList_Seek(LList_t *head,int k)
  4. {
  5.     if(NULL == head -> next)
  6.     {
  7.         perror("head is empty");
  8.         return 0;
  9.     }
  10.     int cnt = 0;
  11.     LList_t *p = head -> next;  //若指向头节点,则循环内不需要等于
  12.     while(head ->next)
  13.     {
  14.         p = p -> next;
  15.         cnt++;
  16.     }
  17.     p = head -> next;  //指针p返回到开头,若指向头节点,则循环内不需要等于
  18.     for(int i = 0; i < (cnt-k); i++)
  19.     {
  20.         p = p -> next;
  21.     }
  22.     printf("%d\n",p -> data);
  23.     return 1;
  24. }
复制代码
  1. //遍历和比较得到最小的值所在的节点
  2. int LList_Print(LList_t *Head)
  3. {
  4.         //对链表的头节点的地址进行备份
  5.         LList_t *Phead = Head;
  6.         LList_t *p = Head -> next;
  7.     LList_t *ptr = Head -> next -> next;
  8.     int min = p -> data;
  9.         //首结点
  10.         while(ptr->next)
  11.         {
  12.                 if(ptr -> data < p ->data)
  13.         min = ptr -> data;
  14.         }
  15.     printf("data = %d\n",ptr -> data);
  16.     return ptr -> data;
  17. }
复制代码
来源:https://www.cnblogs.com/hhail08/p/18151678
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具