(力扣)删除链表的倒数第N个节点———链表

2024-09-03 07:36

本文主要是介绍(力扣)删除链表的倒数第N个节点———链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码为:

*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*
int getLength(struct ListNode* head) {int length = 0;while (head) {++length;head = head->next;}return length;
}struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* L= malloc(sizeof(struct ListNode));L->val = 0;L->next = head;int length = getLength(head);struct ListNode* cur = L;for (int i = 1; i < length - n + 1; ++i) {cur = cur->next;}cur->next = cur->next->next;struct ListNode* ans = L->next;free(L);return ans;
}

分析:

详细步骤

  1. 创建辅助节点

    • struct ListNode* L = malloc(sizeof(struct ListNode));
    • 分配内存并初始化一个辅助头节点L,它的值为0,next指向原始链表的头节点head。这有助于简化边界条件处理,例如删除链表的第一个节点。
  2. 计算链表长度

    • int length = getLength(head);
    • 调用getLength函数获取链表的长度。
  3. 定位要删除的节点的前一个节点

    • struct ListNode* cur = L;
    • 从辅助节点开始,使用一个循环移动到要删除节点的前一个节点。
    • for (int i = 1; i < length - n + 1; ++i) { cur = cur->next; }
    • 这个循环定位到倒数第n个节点的前一个节点。
  4. 删除节点

    • cur->next = cur->next->next;
    • 修改当前节点的next指针,使其跳过下一个节点,从而达到删除效果。
  5. 释放辅助节点并返回结果

    • struct ListNode* ans = L->next;
    • 获取调整后的链表的新头节点。
    • free(L);
    • 释放辅助头节点占用的内存。
    • return ans;
    • 返回新的链表头节点。

这篇关于(力扣)删除链表的倒数第N个节点———链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132422

相关文章

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

csu1329(双向链表)

题意:给n个盒子,编号为1到n,四个操作:1、将x盒子移到y的左边;2、将x盒子移到y的右边;3、交换x和y盒子的位置;4、将所有的盒子反过来放。 思路分析:用双向链表解决。每个操作的时间复杂度为O(1),用数组来模拟链表,下面的代码是参考刘老师的标程写的。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

深入手撕链表

链表 分类概念单链表增尾插头插插入 删尾删头删删除 查完整实现带头不带头 双向链表初始化增尾插头插插入 删查完整代码 数组 分类 #mermaid-svg-qKD178fTiiaYeKjl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-