LeetCode 237 Delete Node in a Linked List

题目

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Given linked list -- head = [4,5,1,9], which looks like following:

8195388-43b9b063cd29bb27.png
image

Example 1:

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function.

Example 2:

Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function.

Note:

  • The linked list will have at least two elements.
  • All of the nodes' values will be unique.
    The given node will not be the tail and it will always be a valid node of the linked list.
  • Do not return anything from your function.

解法思路(一)

  • 这道题和一般的给定值 val,让在链表中找到相应的节点,然后删除不同,这道题直接给出了要删除的节点;
  • 一般在链表中删除节点,是要找到待删除节点的前驱节点,然后让前驱节点跨过待删除节点,指向待删除节点的后继节点;
  • 但在单链表中,直接给出一个节点,是无法访问到其前驱节点的,并且一般的链表相关问题都会指出,不允许改变节点中的值,只能改变节点的 next 的指向,看来这道题就是要直接操作节点中的值了;
  • 具体做法是,将待删除节点的后继节点的值赋给待删除节点,然后让待删除节点的 next 指向其后继的后继,从而将其后继节点从链表中删除,继而间接的删除了给出的节点;

解法实现(一)

时间复杂度
  • O(1);
空间复杂度
  • O(1);
关键字

无法访问节点的前驱节点 改变节点中的值 直接给出待删除的节点

实现细节
  • 题中说明了,链表最少两个节点,链表中节点都是不一样的,待删除的节点不是最后一个节点,给出的节点一定是在这样一个合法的链表中的,所以无需再考虑边界问题;
package leetcode._237;

public class Solution237_1 {

    public void deleteNode(ListNode node) {

        ListNode delNode = node.next;

        node.val = delNode.val;
        node.next = delNode.next;

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值