Leetcode--237.删除链表中的节点(利用链表查找获取某个节点做测试)

题目内容

删除链表中的节点题目链接
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。 传入函数的唯一参数为要被删除的节点 。 现有一个链表 – 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. 链表至少包含两个节点
  2. 链表中所有节点的值都是唯一的
  3. 给定的节点为非末尾节点并且一定是链表中的一个有效节点
  4. 不要从你的函数中返回任何结果。

解题代码

这道题其实很简单,因为我们已经获得了要删除节点的信息,只需要我们将需要删除节点的值修改成其后继节点的值将删除节点指向后继节点的指针指向后继节点的后继节点就可以了。代码如下:

#node为当前需要删除的节点
node.val = node.next.val
node.next = node.next.next

上面的代码只是删除节点的核心操作,接下来我们想要让代码可以真正的进行验证这段代码的正确性,我们需要得到链表的一个节点进行传参,所以我们的整段代码除了函数之外,还需实现:节点类、链表类(初始化、构造链表、查找一个节点并返回该节点、打印链表)。因为这里是已知节点信息删除节点,所以这里就做一个查找返回该节点做测试用例验证。代码如下:

#节点类
class ListNode:
    def __init__(self,x):
        self.val = x
        self.next = None
#链表类
class Linklist:
    def __init__(self):
        self.head = None
    def initlist(self,data):
        self.head = ListNode(data[0])
        r = self.head
        p = self.head
        for i in data[1:]:
            node = ListNode(i)
            p.next = node
            p = p.next
        return r
    def printlist(self,head):
        if head == None : return
        print_res = []
        node = head
        while node != None:
            print_res.append(node.val)
            node = node.next
        return print_res
    def getnode(self,value):
        if value is None:
            return None
        curr_node = self.head
        while curr_node != None:
            if curr_node.val == value:
                return curr_node
            curr_node = curr_node.next
        return None
        
#删除链表节点函数
def deleteNode(node):
    node.val = node.next.val
    node.next = node.next.next

if __name__ == "__main__":
    li = [4,5,1,9]
    lilist = Linklist()
    lii = lilist.initlist(li)
    print(lii)
    print(lilist.printlist(lii))
    node = lilist.getnode(1)
    deleteNode(node)
    print(lilist.printlist(lii))

实验结果

由于这道题很简单且解法单一,只是在这里写个完整的代码验证方法正确性(其实也是为了凑一个勋章,赶紧发第四篇博文,这篇略短略糊弄,以此为戒 0.0),代码运行结果如下:
代码运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值