zoukankan      html  css  js  c++  java
  • 剑指offer:链表中倒数第K个结点

    题目描述:

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

     思路:制造了一个K长度的尺子,把尺子从头往后移动,当尺子的右端与链表的末尾对齐的时候,尺子左端所在的结点就是倒数第k个结点
    首先想到的是使用两个指针,遍历两次,第一次求得head的长度N 然后第二次遍历求N-K+1
    但要求只能使用一次遍历
    快慢指针问题,则定义两个指针,一个先走K-1步,然后第二个开始走,当第一个走到尽头的时候,第二个刚好走到N-K+1步
    注意三种异常情况保证代码的鲁棒性,
    1、K=0的情况,
    2、链表为空的情况
    3、k<N的情况 用p.next==null判断

     1 public class DaoshuK {
     2     public ListNode FindKthToTail(ListNode head,int k) {
     3         ListNode p = head;
     4         ListNode q = null;
     5         if(k==0||head == null){return null;}
     6         for(int i = 0;i<k-1;i++){
     7             if(p.next==null){return null;}
     8             else {
     9                 p = p.next;
    10             }
    11         }
    12         q = head;
    13         while(p.next!=null){
    14             p = p.next;
    15             q = q.next;
    16         }
    17         return q;
    18     }
    19     public static void main(String[] args) {
    20         // TODO Auto-generated method stub
    21 
    22     }
    23 
    24 }
  • 相关阅读:
    sublime text 2安装Emment插件
    PHPExcel IE导出乱码问题
    还是PHPExcel问题
    一条SQL语句查询两表中两个字段
    PHPExcel导出插入图片和居中问题
    jqgrid demo
    openstack horizon 学习(1) 总览
    Python学习笔记
    微软2016校园招聘在线笔试 [Recruitment]
    动态树学习(留坑)
  • 原文地址:https://www.cnblogs.com/zlz099/p/8572414.html
Copyright © 2011-2022 走看看