当前位置:网站首页>链表 删除链表中的节点

链表 删除链表中的节点

2022-06-25 09:37:00 Morris_

LC 删除链表中的节点

请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。

题目数据保证需要删除的节点 不是末尾节点 。

输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

public class ListNode {
    
    /// 节点值
    public var val: Int
    /// next节点
    public var next: ListNode?
    /// 初始化时候传入节点值,初始化时next节点为nil
    public init (_ val: Int) {
    
        self.val = val
        self.next = nil
    }
}

思路:

一般的,如果要删除 5 ,我们首先想到的是将 5 的节点的前驱节点的后继节点指向5的后继节点。

简而言之就是将4的节点的next指针指向1,然后删除5的next指针即可,如下图分割线上部分

但是有个问题就是我们不知道5这个节点的前驱节点,因为ListNode类里面没有保存节点的pre节点,只保存了next节点。

请添加图片描述

换一个思路,如果我们将当前的节点的值改成下一个节点的值,然后将当前节点的next指针指向下下节点,就大到预期效果了。

swift 实现

/// 节点类
public class ListNode {
    
    /// 节点值
    public var val: Int
    /// next节点
    public var next: ListNode?
    /// 初始化时候传入节点值,初始化时next节点为nil
    public init (_ val: Int) {
    
        self.val = val
        self.next = nil
    }
}

class Solution {
    
    func deleteNode(_ node: ListNode?) {
    
        var tempNode = node?.next
        node?.val = (node?.next!.val)!
        node?.next = node?.next?.next
        tempNode?.val = 0
        tempNode = nil
    }
}
原网站

版权声明
本文为[Morris_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Morris_/article/details/125439330