博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表中倒数第k个节点
阅读量:4091 次
发布时间:2019-05-25

本文共 1883 字,大约阅读时间需要 6 分钟。

 

一、问题描述

输入一个链表,输出该链表中倒数第k个节点。

 

二、代码实现

采用双指针法,首先,快指针先走k步,慢指针先走一步;然后,快慢指针同时移动,当快指针走到链表末尾节点的时候,慢指针就刚好走到倒数第k个节点。

这道题不合格的边界条件有:head == null、k <= 0,此外不合法的情况还有链表的长度小于k。

/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {        //双指针法    public ListNode FindKthToTail(ListNode head,int k) {        //排除边界情况        if (head == null || k == 0) {            return null;        }                //1、快指针先走k步,慢指针先走1步        ListNode slow = head, fast = head;        while (fast != null && k > 1) {            fast = fast.next;            k --;        }        //排除单链表长度小于k的情况        if (fast == null) {            return null;        }                //2、快慢指针一起走,当快指针到达最后一个节点时,慢指针就是倒数第k个节点        while (fast.next != null) {            slow = slow.next;            fast = fast.next;        }        return slow;    }        public ListNode FindKthToTail2(ListNode head, int k) {        if (head == null)            return null;                ListNode P1 = head;        while (P1 != null && k-- > 0)            P1 = P1.next;        if (k > 0)            return null;        ListNode P2 = head;        while (P1 != null) {            P1 = P1.next;            P2 = P2.next;        }        return P2;    }            public ListNode FindKthToTail(ListNode head,int k) {              int size = 0;        ListNode cur = head;        while (cur != null) {            size++;            cur = cur.next;        }        if (size < k || k == 0) {            return null;        }                        //int diff = size - k;        ListNode pre = head, post = head;        int count = 0;        while (count < k-1) {            post = post.next;            count++;        }                while (post.next != null) {            post = post.next;            pre = pre.next;        }                return pre;    }}

 

转载地址:http://nfnii.baihongyu.com/

你可能感兴趣的文章
网易云音乐移动客户端Vue.js
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
JavaScript专题之数组去重
查看>>
Immutable.js 以及在 react+redux 项目中的实践
查看>>
Vue2.0全家桶仿腾讯课堂(移动端)
查看>>
React+Redux系列教程
查看>>
19 个 JavaScript 常用的简写技术
查看>>
微信小程序:支付系列专辑(开发指南+精品Demo)
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>
iOS开发 支付之银联支付集成
查看>>
iOS开发支付集成之微信支付
查看>>
浅谈JavaScript--声明提升
查看>>
React非嵌套组件通信
查看>>
Websocket 使用指南
查看>>
浏览器兼容性问题解决方案 · 总结
查看>>
一个很棒的Flutter学习资源列表
查看>>