> 文档中心 > 你今天学算法了吗?打卡第七天

你今天学算法了吗?打卡第七天

 


目录

 一、题目

1、题目描述

2、基础框架

3、原题链接

二、解题报告

1、思路分析

​2、代码详解

三、本题小知识



 一、题目

1、题目描述

  

给你一个链表,删除链表的倒数第 n 结点,并且返回链表的头结点。

示例 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;    }}```

三、本题小知识

    链表删除