算法-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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2015-07-06 FastDFS安装配置
2015-07-06 nginx+lua安装配置