• 剑指Offer(Java版)第十八题:输入一个链表,输出该链表中倒数第k个结点。 为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。 例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。 这个链表的倒数第3个结点是值为4的结点。


    /*
    输入一个链表,输出该链表中倒数第k个结点。
    为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。
    例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。
    这个链表的倒数第3个结点是值为4的结点。
    */
    public class Class18 {
    //利用两个相聚为k-1的指针
    static class ListNode{
    int val;
    ListNode next = null;
    ListNode(int val){
    this.val = val;
    }
    }

    public ListNode FindThisPoint(ListNode head, int k){
    ListNode fast = head;
    ListNode slow = head;
    if(head == null || k <= 0){
    return null;
    }
    //fast先走k-1步
    while(k-- > 1){
    if(fast.next != null){
    fast = fast.next;
    }else{
    return null;
    }
    }
    //接着slow跟着fast走
    while(fast.next != null){
    fast = fast.next;
    slow = slow.next;
    }
    return slow;
    }

    public void test() {
    ListNode node1=new ListNode(1);
    ListNode node2=new ListNode(2);
    ListNode node3=new ListNode(3);
    ListNode node4=new ListNode(4);
    node1.next=node2;
    node2.next=node3;
    node3.next=node4;
    ListNode result = FindThisPoint(node1, 1);
    if(result.val==4)
    System.out.println("test4 passed!");
    else
    System.out.println("test4 failed!");
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Class18 c = new Class18();
    c.test();

    }

    }

  • 相关阅读:
    【转载】webDriver拾级而上·之五 iframe的处理
    Linux课程笔记 用户和用户组管理
    Linux课程笔记 文件和目录权限
    Linux课程笔记 软硬链接
    Java算法面试题
    Linux课程笔记 Day09 课上内容总结 MySql,Php的安装及Apache,Nginx,Php的优化
    Day13 高级子查询
    Day12 SET运算符
    Day11 其他数据库对象
    Linux课程笔记 Day08 课上内容总结 Apache,Raid技术及Nginx
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12451939.html
Copyright © 2020-2023  润新知