找链表的中间结点和倒数第k个结点(链表笔试题面试题)

发布时间:2020-08-19 10:29:38 作者:hhaxy77
来源:网络 阅读:461

一、问题

  1. 查找链表的中间节点

  2. 查找链表的倒数第k个结点

二、解决思路:快慢指针

  1. 找中间节点:快指针走两步,慢指针走一步

  2. 找倒数第k个结点:快指针走k步或k-1步,然后慢指针再开始走

三、代码实现(c语言)

1.找中间结点

sListNode* FindMidNode(sListNode* pHead)

{

 sListNode* slow = pHead, *fast = pHead;

 while(fast!=NULL && fast->next!=NULL)

 {

  slow = slow->next;

  fast = fast->next->next;

 }

 return slow;

2.找倒数第k个结点

sListNode* FindKTailNode(sListNode* pHead,int k)
{
 assert(k >= 0);
 
 sListNode* fast = pHead, *slow = pHead;
 
 while(--k)    //快指针走k-1步 
 {
  if(fast->next == NULL)
   return NULL;
  fast = fast->next;
 }
 
 while(fast->next != NULL)
 {
  slow = slow->next;
  fast = fast->next;
 }
 return slow;
}

推荐阅读:
  1. 剑指offer之面试题15 :链表中倒数第k个结点
  2. 链表中倒数第k个结点——15

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

试题 笔试题 链表面

上一篇:OpenCV实现图片漫画效果的方法

下一篇:利用MyBatis实现条件查询的方法有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》