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

原创 2016年06月01日 00:05:32

一、问题

  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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【融博笔试题】查找单链表倒数第k个结点的值

继华赛之后,又一次倒在面试门前。基础不扎实就是不行啊! 下来做完这道题,顺便复习单链表。代码如下:   //-------------------------------------------...

面试题15:查找链表中倒数第k个结点

仅一次遍历查找链表中倒数第k个结点。

剑指Offer----面试题15:链表中倒数第K个结点

题目: 输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即聊表的尾结点是倒数第一个结点。例如一个链表6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。...

程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode {       int       m_nKey; ...

面试题15. 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。思路: Step1. 设置两个指针slow和fast,初始时均指向头结点 Step2. slow不动,fast向前走k-1步 Step3. 然后...

面试题15—链表中倒数第K个结点

题目:求单链表中倒数第K个结点,最后一个结点的下标设置为1。 代码示例: #include using namespace std; template struct Node { T data...

剑指Offer:面试题15 链表中倒数第k个结点

/* 链表中倒数第k个节点: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是 倒数第一个节点。例如一个链表有6个节点,从头节点开始它们的值依次是1...

【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点

鲁棒性是指程序能够判断输入是否符合规范要求,并对不和要求的输入予以 合理的处理。 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517题目1517:链...

剑指offer面试题15 链表中倒数第K个结点

一、题目输入一个链表,输出该链表中倒数第K个结点。为符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6.则这...

面试题整理 2:求链表倒数第 k 个结点

题目:输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第 0 个结点为链表的尾指针。  链表结点定义如下:   struct ListNode { int m_nKe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:找链表的中间结点和倒数第k个结点(链表笔试题面试题)
举报原因:
原因补充:

(最多只允许输入30个字)