zoukankan      html  css  js  c++  java
  • 剑指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();

    }

    }

  • 相关阅读:
    关于codeblocks插件(持续更新)
    自定义gvim配色方案qiucz.vim的源码
    mark it
    poj 1032
    poj 1028
    最小公倍数是lcm
    problems
    hdu 1067
    某些题的做法。。。
    突然明白了什么
  • 原文地址:https://www.cnblogs.com/zhuozige/p/12451939.html
Copyright © 2011-2022 走看看