题目要求:

  输入一个链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。

  参考资料:剑指offer第15题

题目分析:

  1.两个指针,第一个先走k步,然后两个指针同时走,直到第一个走到尾指针,此时第二个指针即为所求;

  2.令函数原型为:ListNode *findKthToTail(ListNode *head,unsigned int k);

   特殊情况:

      i). head为空指针;

      ii). head为头结点的链表的结点总数小于k;

      iii).k=0.

  3.注意此处为倒数第0个结点为链表的尾结点,与剑指offer的第一个结点的区别是:第0个结点的最后一个while里应该ptwo->next != NULL;而第1个结点的最后一个while里应该ptwo != NULL。可画图理解。

代码实现: 

#include <iostream>

using namespace std;

typedef struct ListNode
{
struct ListNode *next;
int data;
}ListNode;
ListNode *findKthToTail(ListNode *head,unsigned int k);
void initList(ListNode **head); int main(void)
{
// int k = 4;
int k = ;
ListNode *head; initList(&head);
head = findKthToTail(head,k); if(head==NULL)
cout << "head为空或者链表长度小于k";
else
cout << head->data << " ";
cout << endl; return ;
}
ListNode *findKthToTail(ListNode *head,unsigned int k)
{
if(k== || head==NULL)
return NULL; ListNode *pone,*ptwo;
pone = ptwo = head;
for( ; k > && ptwo != NULL; k--)
ptwo=ptwo->next;
if (k > ) return NULL;//链表长度小于k
while(ptwo->next != NULL)
{
pone=pone->next;
ptwo=ptwo->next;
}
return pone;
}
//1-->2-->3-->NULL
void initList(ListNode **head)
{
ListNode *tmp = new ListNode;
tmp->data = ;
*head = tmp; tmp = new ListNode;
tmp->data = ;
(*head)->next = tmp; ListNode *tmp1 = new ListNode;
tmp1->data = ;
tmp1->next = NULL;
tmp->next = tmp1;
}

链表中倒数第k个结点 【微软面试100题 第十三题】的更多相关文章

  1. 剑指offer四:链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...

  2. 剑指Offer 链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点.     思路: 法1:设置2个指针p,q.p先移动k次,然后pq同时后移,p到链表尾尾的时候,q指向倒数第k个节点. 注意://需要考虑k=0,以 ...

  3. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

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

  4. 输出单向链表中倒数第k个结点

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

  5. 找出链表中倒数第 k 个结点

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

  6. 链表中倒数第k个结点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 因为是单向链表,如果使用最普通的遍历来解决的话会多出很多不必要的遍历.有一个比较好的解法,设置两个指针两个指针之间差k-1个位置,也就是当后 ...

  7. IT公司100题-13-求链表中倒数第k个结点

    问题描述: 输入一个单向链表,输出该链表中倒数第k个结点.链表倒数第0个节点为NULL. struct list_node { int data; list_node* next; }; 分析: 方法 ...

  8. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

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

    题目: 输入一个链表,输出该链表中倒数第k个结点. 例如:链表中有6个结点,从头到尾依次为1,2,3,4,5,6,则该链表的倒数第3个结点为4. 链表结点定义: struct ListNode{ in ...

随机推荐

  1. Java分页下载

    需求.提供公共的可以按照一定条件查询出结果,并提供将查询结果全部下载功能(Excel.CSV.TXT),由于一次性查出结果放到内存会占用大量内存.需要支持分页模式查询出所有数据. 实现思路 1.在公共 ...

  2. Android 读取excel 文件

    在面对选择国家地区,选择手机号码区号等信息的时候,常常我们是读取已存好的数据,我现在读取的就是excel里面的数据,所以在此记录下读取的方法以及注意点. 下面就是读取国际地区手机区号的数据效果图: e ...

  3. ios 身份证照片识别信息

    一个近乎完整的可识别中国身份证信息的Demo就问问你霸气不

  4. Intellij IDEA项目添加资源文件

    添加了一个资源文件,但读取的时候出错了 prop.load(Config.class.getResourceAsStream("/resources/dbconfig.properties& ...

  5. 真正的S2b其实是S2b2c

    本文转自阿里参谋长曾鸣:真正的S2b其实是S2b2c! 在<在未来五年,S2b是最有可能领先的商业模式>这篇文章发表之后,曾鸣书院收到了非常多的反馈,看到很多实践和思考. 在这篇文章中,曾 ...

  6. 掌握 Azure 的注册、帐户和订阅管理 Azure 上云须知

    计划使用由世纪互联运营的 Microsoft Azure 的用户,可通过下列流程注册开通并购买所需 Azure 服务:信息获取 > 试用 > 购买 > 账户/订阅管理 > 支付 ...

  7. COGS 147. [USACO Jan08] 架设电话线

    ★★☆   输入文件:phoneline.in   输出文件:phoneline.out   简单对比时间限制:1 s   内存限制:16 MB Farmer John打算将电话线引到自己的农场,但电 ...

  8. [opencv] applyColorMap

    applyColorMap 功能 转化为热力图,因为热力图我们看的变化更加细微,在很多地方都用到了热力图. 最近在看CAM,所以记一记这个函数. 感觉还是很有用的. 代码 >>> i ...

  9. AWVS12 防止反复注册

    以管理员权限运行cmd,输入以下内容: cacls "C:\ProgramData\Acunetix\shared\license." /t /p everyone:r 如图:

  10. 获取地址栏参数,json遍历

    1. 获取地址栏参数 GetQueryString: function(name){ // 获取地址栏参数 var reg = new RegExp("(^|&)"+ na ...