zoukankan      html  css  js  c++  java
  • 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:

    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.

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    1. 链表这种结构,似乎总是需要先设置退出的情况

    [思维问题]:

    不知道输入参数就一个变量,该怎么删除。其实就是自己命名下一个节点就行了

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [一句话思路]:

    其实是把node下一个节点的值拿过来用,下一个节点删掉,node自己不删,自带主角光环

    这也是本题特殊的一个思维技巧吧。很多链表的题挺奇葩的,本身就只能这么写。

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 节点的值也需要取代掉

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    [复杂度]:Time complexity: O(n) Space complexity: O(1)

    [算法思想:迭代/递归]:

    [关键模板化代码]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

     [是否头一次写此类driver funcion的代码] :

     [潜台词] :

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void deleteNode(ListNode node) {
            //退出的情况
            if (node == null || node.next == null) {
                return ;
            }
            
            //命名下一个节点
            ListNode next = node.next;//1
            //用下一个节点值来替代和链接
            node.val = next.val;//5 = 1
            //改变当前节点的链接
            node.next = next.next; //9
        }
    }
    View Code
  • 相关阅读:
    二维树状数组(模板)
    3033太鼓达人
    2503相框
    Ant Trip(画几笔)
    [ZJOI2004]嗅探器
    [USACO06JAN]冗余路径Redundant Paths(缩点)
    P3806 【模板】点分治1
    P4149 [IOI2011]Race
    P2634 [国家集训队]聪聪可可
    P4178 Tree
  • 原文地址:https://www.cnblogs.com/immiao0319/p/12927118.html
Copyright © 2011-2022 走看看