zoukankan      html  css  js  c++  java
  • leecode刷题(20)-- 删除链表中的节点

    leecode刷题(20)-- 删除链表中的节点

    删除链表中的节点

    描述:

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

    现有一个链表 -- head = [4,5,1,9],它可以表示为:

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

    现有一个链表 -- head = [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.
    

    说明:

    • 链表至少包含两个节点。
    • 链表中所有节点的值都是唯一的。
    • 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
    • 不要从你的函数中返回任何结果。

    思路:

    这道题出的很妙,因为从链表里删除一个节点 node ,我们最先想到的是修改之前节点的 next 指针,使其指向之后的节点。

    即:

    p.next = p.next.next
    

    但这道题因为我们无法访问我们想要删除的节点之前的节点,所以我们始终不能修改该节点的 next 指针。我们换种思路,我们将想要删除的节点替换为它后面节点中的值,然后删除它之后的节点。这样我们就完成了题目要求的删除链表中的节点。

    代码如下:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void deleteNode(ListNode node) {
            node.val = node.next.val;
            node.next = node.next.next;
        }
    }
    

    扩展:

    这里我们可以看到代码中前面的注释中有个 ListNode 链表类,该类定义如下:

    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { 
            val = x; 
        }
    }
    

    此类中包含了指向当前值的val,以及指向下一个值的next。

  • 相关阅读:
    那些H5用到的技术(4)——弹幕
    Android自动化之AccessibilityService
    那些H5用到的技术(3)——屏幕场景滑动
    更新Mac双系统多分区
    那些H5用到的技术(2)——音频和视频播放
    那些H5用到的技术(1)——素材加载
    openstf安装手记
    我的2016年总结
    与为知笔记融合-博客园装修笔记
    点击劫持(click jacking)
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10431589.html
Copyright © 2011-2022 走看看