算法-21可见的山峰对数量

描述

给出一个单链表,返回删除单链表的倒数第 K 个节点后的链表。

输入描述:

第一行输入两个正整数 n, K ,分别表示链表的长度和要删除单链表倒数第K个节点。 接下来一行有 n 个整数,依次表示单链表中的各个节点的节点值val。

输出描述:

在给定的函数内返回删除倒数第K个节点后的链表的头指针。

示例1

复制代码
输入:
5 4
1 2 3 4 5
输出:
1 3 4 5
复制代码

思路

1. 先从头到位遍历一遍遍历表,每遍历一个节点将K值减1, 将K值更新为K-N;
2. 如果k 值大于0,说明链表根本没有倒数第k 个节点  如果等于0,那么头节点就是倒数第k 个节点,此时应该返回 head.next;
3. 如果小于0,再遍历一遍链表,每遍历一个节点将K值加1,直到K值为0停止,这样就将K值更新为0-(K-N)= N-K,此时的节点便是第N-k个节点,即:要删除"倒数第k个节点"的前一个节点;
 
代码如下:
复制代码
import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        
        if(n<k) {
            System.out.println("链表根本没有倒数第K个节点");
        }
        
        Node node = new Node(sc.nextInt());
        Node head = node;
        for(int i=1;i<n;i++) {
            Node next = new Node(sc.nextInt());
            node.next = next;
            node = next;
        }
        Node result = removeLastKtheNode(head,k);
        StringBuilder sb = new StringBuilder();
        while(result != null) {
            sb.append(result.value).append(" ");
            result = result.next;
        }
        System.out.println(sb.toString().trim());
    }
    
    
    public static Node removeLastKtheNode(Node head,int lastKth) {
        if(head == null || lastKth<1) {
            return head;
        }
        Node cur = head;
        while(cur != null) {
            lastKth--;
            cur = cur.next;
        }
        if(lastKth == 0) {
            head = head.next;
        }
        if(lastKth<0) {
            cur = head;
            while(++lastKth != 0) {
                cur = cur.next;
            }
            cur.next = cur.next.next;
        }
        return head;
    }
}

class Node {
    public int value;
    public Node next;
    
    public Node(int data) {
        this.value = data;
    }
}
复制代码

 

posted @   思凡念真  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-07-06 FastDFS安装配置
2015-07-06 nginx+lua安装配置
点击右上角即可分享
微信分享提示