找链表的中间结点和倒数第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个结点

****单链表操作之删除倒数第k个结点**** //函数功能:删除链表的倒数第k个结点;1 //自定义的结点结构体和头指针结构体: //函数原型:void DelKNode(pLin...
  • bitboss
  • bitboss
  • 2016年06月10日 18:28
  • 1607

单向链表_找出倒数第K个节点

实现一个算法,找出单向链表中倒数第K个结点。
  • z597372259
  • z597372259
  • 2014年10月23日 20:48
  • 1890

[算法]找出单链表中的倒数第k个元素

找出单链表中的倒数第k个元素解题思路: 为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得...
  • CodeEmperor
  • CodeEmperor
  • 2016年05月06日 16:12
  • 3086

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

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

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

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode {       int       m_nKey; ...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年02月22日 20:46
  • 405

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

仅一次遍历查找链表中倒数第k个结点。
  • kekong0713
  • kekong0713
  • 2016年06月27日 14:25
  • 732

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

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

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

题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次...
  • jim_cainiaoxiaolang
  • jim_cainiaoxiaolang
  • 2017年06月12日 10:15
  • 127

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

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

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

ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead == NULL || k == 0) ...
  • sinat_20265495
  • sinat_20265495
  • 2016年11月29日 15:07
  • 115
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:找链表的中间结点和倒数第k个结点(链表笔试题面试题)
举报原因:
原因补充:

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