你今天学算法了吗?打卡第七天
目录
一、题目
1、题目描述
2、基础框架
3、原题链接
二、解题报告
1、思路分析
2、代码详解
三、本题小知识
一、题目
1、题目描述
示例 1:
输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1输出:[]
示例 3:
输入:head = [1,2], n = 1输出:[1]
2、基础框架
Java 版本给出的基础框架代码如下:
/ * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode removeNthFromEnd(ListNode head, int n) {}
提示:
- 链表中结点的数目为 sz
-
1 <= sz <= 30
-
0 <= Node.val <= 100
-
1 <= n <= sz
3、原题链接
LeetCode 19. 删除链表的倒数第 N 个结点
二、解题报告
1、思路分析
删除指定结点
首先我们要找到该结点d的前一个结点c
然后把c的next指向d的next

2、代码详解
```java/ * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode ret; ListNode dummy = new ListNode(0, head); //定义用于遍历的指针 ListNode cur = dummy; //倒数第n个可以转换为正第size-n+1个 int sn=sizeFind(head)-n+1; //找到要删除结点的前一个结点 for(int i=1;i<sn;i++){ cur=cur.next; } //删掉第sn个结点 cur.next = cur.next.next; ret=dummy.next; return ret; } / * 定义获取链表结点个数的方法 * @param head * @return */ public int sizeFind(ListNode head){ int size = 0; while(head!=null){ size++; head=head.next; } return size; }}```
三、本题小知识
链表删除