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

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.

返回链表 4->5.

思路:定义快慢双指针,先让快指针先走k步,然后双指针一起移动,完成只需要遍历一遍

struct ListNode* getKthFromEnd(struct ListNode* phead, int k){
    struct ListNode* pfast = phead ;
    struct ListNode* pslow= phead ;
    while(k--)
    {
        pfast=pfast->next ;
    }
    while(pfast!=NULL)
    {
        pslow=pslow->next;
        pfast =pfast->next;
    }
    return pslow ;
}
BTW 下面顺提一下我一开始的麻烦做法虽然也通过了不过是真的蠢 - -
先反转 然后找到反转的节点,接着再反转@@ 哈哈。还是要熟练运用快慢指针呀

struct ListNode* curr =phead ;
struct ListNode* temp =NULL ;
struct ListNode* p =NULL ;
//反转链表
while(curr!=NULL)
{
temp = curr->next ;
curr->next =prev ;
prev = curr ;
curr = temp ;
}
//找到倒数k的节点
phead = prev ;
p=phead;
while(len != k)
{
p=p->next ;
len++ ;
}
curr = phead ;
prev =NULL ;

//继续反转

while(prev!=p)
{
temp =curr->next;
curr->next =prev ;
prev = curr ;
curr =temp ;
}
return prev ;

 

最新文章

  1. Android笔记之——事件的发生
  2. python面向对象中的__init__方法怎么理解?
  3. go-- 用go-mssql驱动连接sqlserver数据库
  4. POJ1637 Sightseeing tour(判定混合图欧拉回路)
  5. [moka同学笔记]Yii2.0验证码
  6. 在Oracle里,表的别名不能用as,列的别名可以用as
  7. [Android Pro] android Flag介绍
  8. Windows Server 2012 R2 设置 smtp 服务器
  9. Git教程(2)官方命令文档及常用命令表
  10. 重启php-fpm
  11. WORD文档的长串数字如何粘贴到excel
  12. Android判读是否安装了某一款APP
  13. C语言获取键盘按键
  14. Linux GPIO 注册和应用
  15. java中的对象
  16. N个数组中所有元素的排列组合(笛卡尔积)算法
  17. 谈谈Javascript异步代码优化
  18. Windows驱动开发入门指引
  19. SpringBoot2.0+Mybatis-Plus3.0+Druid1.1.10 一站式整合
  20. intellij idea 汉化

热门文章

  1. 什么是AOP面向切面编程思想
  2. DEVIL MAY CRY V:《鬼泣5》
  3. vue及vant框架,多语言配置
  4. ES6和node的模块化
  5. luogu P3384 【模板】重链剖分
  6. HTML(多行)文本超过部分隐藏,末尾显示(...)
  7. Go并发模式代码示例
  8. css字体样式+文本样式
  9. centos7 lnmp环境搭建
  10. fatal error LNK1169: one or more multiply defined symbols found