题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

思路:
1.构建节点类
2.根据输入的数据形成链表
3.寻找倒数第K个节点:
采用快慢指针:(1)先让快指针走K步(2)同时让快慢指针一起走,当快指针指向为空时,此时的慢指针指向目标节点。
4.注意点:需要注意到K<1的情况

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.Buffer;

/**
 * @author m
 * @Description 输出单向链表中倒数第k个结点
 * 思路:快慢指针法:
 * 1.让快指针先走k步
 * 2.快慢指针同时开始走,当快指针=null时,慢指针指向目标
 * @creat 2021-07-22
 */
public class HJ51 {
    /**
     * 节点类
     */
    public static class Node{
        Node next;
        int val;
        Node(int val){
            this.val=val;
            this.next=null;
        }
    }

    public static void main(String[] args) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s = bf.readLine())!=null){
            int N = Integer.parseInt(s);//节点个数
            String[] str = bf.readLine().split(" ");
            int K = Integer.parseInt(bf.readLine());

            //形成链表:
            Node head = new Node(Integer.parseInt(str[0]));
            Node temp = head;
            for(int i=1;i<str.length;i++){
                Node node = new Node(Integer.parseInt(str[i]));
                temp.next = node;
                temp = temp.next;
            }

            if(K==0) System.out.println(0);
            else{
                int res = findK(head, K);
                System.out.println(res);
            }

        }

    }


    static int findK(Node head,int K){
        Node fast = head;
        Node slow = head;
        for(int i=0;i<K;i++){
            fast = fast.next;
        }
        //
        while(fast != null){
            fast = fast.next;
            slow = slow.next;
        }
        //此时slow指向第K个节点
        return slow.val;
    }


}
全部评论

相关推荐

11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务