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

#牛客创作赏金赛# #刷题我是认真的#

解题思路:

  1. 先将指定输入转化为链表
  2. 使用快慢指针,先将快指针前进k步,然后同步前进快慢指针,最终快指针为null时,慢指针的值就是倒数k个节点
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<Integer> result = new ArrayList<>();
        while (in.hasNext()) {
            int n = Integer.parseInt(in.nextLine());
            ListNode head = buildLinkList(in.nextLine().split(" "));
            int k =  Integer.parseInt(in.nextLine());
            ListNode fast = head;
            ListNode slow = head;
            while (k > 0 && fast != null) {
                fast = fast.next;
                k--;
            }
            while (fast != null) {
                fast = fast.next;
                slow = slow.next;
            }
            result.add(slow.val);
        }
        for (int a : result) {
            System.out.println(a);
        }
    }

    public static ListNode buildLinkList(String[] valLine) {
        String first = valLine[0];
        ListNode head = new ListNode(Integer.parseInt(first));
        ListNode pre = head;
        for (int i = 1; i < valLine.length; i++) {
            pre.next = new ListNode(Integer.parseInt(valLine[i]));
            pre = pre.next;
        }
        return head;
    }

    static class ListNode {
        int val;
        ListNode next;
        public ListNode(int val) {
            this.val = val;
        }
    }
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务