首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何删除并返回链表中的最后一项?

删除并返回链表中的最后一项可以通过以下步骤实现:

  1. 遍历链表,找到倒数第二个节点。可以使用两个指针,一个指向当前节点,另一个指向下一个节点。
  2. 将倒数第二个节点的next指针指向null,断开最后一个节点与链表的连接。
  3. 返回最后一个节点。

以下是一个示例的JavaScript代码实现:

代码语言:txt
复制
function deleteAndReturnLastNode(head) {
  if (head == null || head.next == null) {
    return null; // 链表为空或只有一个节点,直接返回null
  }

  let prev = null;
  let current = head;

  while (current.next != null) {
    prev = current;
    current = current.next;
  }

  prev.next = null; // 断开最后一个节点与链表的连接

  return current; // 返回最后一个节点
}

这个函数接受链表的头节点作为参数,返回被删除的最后一个节点。如果链表为空或只有一个节点,函数返回null。

这个函数的时间复杂度为O(n),其中n是链表的长度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

删除链表倒数第N个节点,返回链表头节点

大概内容:删除链表倒数第N个节点,返回链表头节点。...在解题过程要添加一个亚节点(dummy)进行辅助(如:图1),D就是我们亚节点。 ?...2、第一个指针节点向前移动N+1步,第二个指针保持不动,这时两个指针相隔N个节点距离 3、同时移动两个指针保持恒定距离,直到第一个指针到达最后一个节点。...4、这时第二个指针所指向节点下一个节点就是要删除节点(倒数第N个节点),将第二个指针指向节点next指向下下个节点就完成了。 ?...仔细查看评论区我们又看到不错解题思路,使用递归方法和特性实现 0x03:递归特性 实现思路: 1、利用递归调用特性先循环一遍链表,相当于用指针从链表头走到链表尾(如:图3-2) 2、递归调用在调用自身方法后面会倒叙循环调用

47320

删除链表节点

题目描述 难度级别:简单 请编写一个函数,使其可以删除某个链表给定(非末尾)节点。传入函数唯一参数为 要被删除节点 。...,那么在调用了你函数之后,该链表应变为 4 -> 1 -> 9....提示: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...解题思路 题目中待传递给当前函数实参node,它是链表某一个待删除节点,然后从链表删除这个节点。...这里因为待传入实参没有完整链表,所以无法获取到之前节点,所以无法修改前一个节点next指向。这时需要是将要删除节点值替换为它下一个节点值,之后要删除这个节点next指向为下下一项

2.4K00
  • 删除链表重复结点

    题目描述 在一个排序链表,存在重复结点,请删除链表重复结点,返回链表头指针。...情况一 去掉重复部分保留一个 例如,链表1->2->3->3->4->4->5 处-理后为 1->2->3->4->5 代码: public ListNode deleteDuplication(ListNode...去掉重复部分,都不保留,有重复就去掉 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思想: 主要用了一个指针preNotParall 每次指向上一个不重复数据 headpre...是第一个不重复数据(自己定义,防止上来就是重复数据),也是头上一个指针....pre和curr是工作指针,用来往后撸链表,留有用. 看完代码应该理解实际上我这里类似于用preNotParall来选取有用结点组成新链表.

    1.7K20

    237 删除链表节点

    01 题目信息 题目地址: https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 请编写一个函数,使其可以删除某个链表给定(非末尾...传入函数唯一参数为 要被删除节点 。 现有一个链表 -- head = [4,5,1,9],它可以表示为: ?...提示: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。...x) { val = x; } } 现在它传一条链表一个节点,删除这个节点。...这样就不用改变4节点指向,只是把它指向这个对象值与next都改掉,那么4还是指向0x001只不过是1了,而这个指向又是0x004就是9,链表也就变成了4--->1--->9完成删除5操作 public

    1.3K10

    2 删除链表节点

    复习链表插入 链表一个节点是由数据域和指针域构成,指针域地址值为下个元素地址。那么我们需要插入或者删除一个元素怎么处理呢? ? 先查看原始链表结构,准备将结点x插入链表。 ?...复习链表删除 上面简单介绍了带头结点链表,在删除处理时候同样适用,所以我们以后就直接采用带头结点链表讲解。下面直接看看删除节点图。 ?...1 Leetcode237 删除链表节点 请编写一个函数,使其可以删除某个链表给定(非末尾)节点,你将只被给定要求被删除节点。...说明: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。 先思考一分钟哟! 效果更好哈!...目标还是删除5,最后结果为[4,1,9]。我们把需要删除5结点后面节点1赋值给它,如下图8. ?

    1.3K20

    删除排序链表重复元素删除排序链表重复元素 II

    Remove Duplicates from Sorted List 题目大意 删除一个有序链表重复元素,使得每个元素只出现一次。...else: p = p.next return head Remove Duplicates from Sorted List II 题目大意 把一个有序链表中所有重复数字全部删光...,删除后不再有原先重复那些数字。...解题思路 不同地方是这里要删掉所有的重复项,由于链表开头可能会有重复项,被删掉的话头指针会改变,而最终却还需要返回链表头指针。...所以需要定义一个新节点,然后链上原链表,然后定义一个前驱指针和一个现指针,每当前驱指针指向新建节点,现指针从下一个位置开始往下遍历,遇到相同则继续往下,直到遇到不同项时,把前驱指针next指向下面那个不同元素

    2.8K20

    Swift 删除链表节点 - LeetCode

    LeetCode 题目: 删除链表节点 请编写一个函数,使其可以删除某个链表给定(非末尾)节点,你将只被给定要求被删除节点。...现有一个链表 -- head = 4,5,1,9,它可以表示为: 4 -> 5 -> 1 -> 9 示例1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释...: 给定你链表中值为 5 第二个节点,那么在调用了你函数之后,该链表应变为 4 -> 1 -> 9....示例2: 输入: head = [4,5,1,9], node = 1 输出: [4,5,9] 解释: 给定你链表中值为 1 第三个节点,那么在调用了你函数之后,该链表应变为 4 -> 5 -> 9...说明: 链表至少包含两个节点。 链表中所有节点值都是唯一。 给定节点为非末尾节点并且一定是链表一个有效节点。 不要从你函数返回任何结果。

    1.3K40

    vue 使用数组splice方法失效,且总是删除最后一项解决办法。

    今天在写项目的时候,遇到一个很简单需求,下图,点击添加标签,左边出现一个可以输入标签,点击删除按钮, 就能删除当前标签,很简单需求,我却搞了一个多小时(哎…新手愚笨啊) 一看到这个我思路就是点击添加标签...,把新增节点push到自己定义数组里,然后渲染出来,点击删除按钮,用splice方法从数组删除掉当前节点(很简单,很明确思路嘛,但是却事与愿违) <div class...deleteTag(index){ this.tags.splice(index, 1) }, 当我点击删除时候,总是删除最后一个添加节点...我问题之所以会产生,是因为在于key绑定问题,我只是用下标来绑定每一个标签key,而没有与数组中元素挂钩,因此当删除数组元素时,vue会采用一种叫做’就地复用‘原则,将旁边元素直接拿过来使用,...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    2.6K20

    删除链表元素基本操作。链表

    删除链表中等于给定值val所有节点。 样例 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后链表:1->2->4->5。 基本操作。...链表 链表有很多种,这里给是单向链表链表由节点构成,每一个节点包含两个信息,分别是数据和链(实际上就是一个指针,指向下一个节点,如果没有下一个这个指针为NULL)。...* int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; 这是题目中给出一个单向链表节点...除此之外还有双向链表(每一个链表有两条链,分别指向前一个和后一个节点),循环链表也是有的,就是收尾又链接起来,显而易见是有单向循环也有双向循环。...链表优点: 插入删除方便,只要改变指针指向就可以,不用像数组一样需要移动数据。 链表缺点: 因为内存不连续,所以查找效率不高。 它优缺点和数组刚好是反过来

    90910
    领券