首页 > 其他分享 >链表操作-leetcode23-删除倒数第几个节点

链表操作-leetcode23-删除倒数第几个节点

时间:2023-03-22 11:04:20浏览次数:35  
标签:ListNode val int next 链表 dummy2 节点 倒数第 leetcode23

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

示例 1:

img

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
思路:首先遍历所有节点计算总数,然后计算出要跳过的那个节点的前一个节点,然后利用探测指针跳过,由于要跳过的可能是头结点,所以需要假如一个探测节点,所以计算位置的时候 int position = len - n+1 -1+1;//要删除的节点的前一个节点,因为添加了一个虚节点,所以在+1 
需要这样结算
//leetcode submit region begin(Prohibit modification and deletion)

/**
 * 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) {
        if (head == null) {
            return null;
        }

        int len = 0;
        ListNode dummy = head;
        while (dummy != null) {
            len++;
            dummy = dummy.next;
        }

        int position = len - n+1 -1+1;//要删除的节点的前一个节点,因为添加了一个虚节点,所以在+1
        System.out.println("position: " + position);

        int currPosition = 0;
        ListNode dummy3 = new ListNode(-1);
        dummy3.next = head;
        ListNode dummy2 = dummy3;

        while (dummy2 != null) {
            currPosition++;
            System.out.println("currPosition: " + currPosition);

            if (currPosition == position) {
                System.out.println("dummy2.next: "+dummy2.next.val);
                //System.out.println("dummy2.next.next: "+dummy2.next.next.val);

                dummy2.next = dummy2.next.next;


                return dummy3.next;
            } else {
                dummy2 = dummy2.next;
            }

        }
        return null;

    }
}
//leetcode submit region end(Prohibit modification and deletion)

标签:ListNode,val,int,next,链表,dummy2,节点,倒数第,leetcode23
From: https://www.cnblogs.com/xiaoshahai/p/17242851.html

相关文章

  • LeetCode|876. 链表的中间结点
    题目链接:876.链表的中间结点难度简单829收藏分享切换为英文接收动态反馈给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中......
  • c++链表记录
    ListNode*pre=NULL;//定义一个空节点ListNode*tmp;//定义一个空的临时节点,此时tmp==NULL ListNode*cur=head;//定义一个等于节点head的节点 ListNode*du......
  • 链表知识点
    链表知识点总结链表简介链表:是由一种一个或多个指针域和数据域组成的特殊数据结构链表类型单链表单链表中的指针域指向下一个节点双链表双链表中有两个指针域,一个......
  • 数据结构-->带头双向循环链表--->优化
    好了,各位老铁!!现在开始本期讨论话题:<--头删数据----头插数据-->直接上手代码:头文件“List.h”#include<stdio.h>#inculde<stdlib.h>//扩容函数malloc库#include<asse......
  • algrothm_reverse(algrothm+round)【反转链表】
    ......
  • 数据结构-->带头双向循环链表
    好了,小伙伴们!!本期我们开始“带头双向循环链表”!!很显然,这一次要涉及哨兵位了!!而在这之前,单向链表当中没有丝毫提及“哨兵位”的概念!!其实,这是因为,带哨兵位的单向链表在实际开发......
  • 合并链表-leetcode23-合并k个升序链表
    给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6......
  • N03、从尾到头打印链表(挺简单的)
    ​​3、从尾到头打印链表​​输入一个链表,按链表从尾到头的顺序返回一个ArrayList。示例1输入{67,0,24,58}返回值[58,24,0,67]1、这题也太简单了,从前向后保存,然后reverse......
  • golang面试题单向链表和双向链表
    甲流难受中,简单发一个链表 1.单项列表packagemainimport( "fmt" "strconv")typeNodestruct{ valueint next*Node}typeLinkliststruct{ leni......
  • [数据结构]循环链表及其基本操作
    /**@Author:*@data:2019-12-0319:47:29*@LastModifiedby:*@LastModifiedtime:2019-12-0320:00:06*/#include<iostream>#include<cstdio>usingnamesp......