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

 


目录

 一、题目

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

三、本题小知识

    链表删除

猜你喜欢

转载自blog.csdn.net/qq_43846797/article/details/124354081