开荒新系列之Leetcode: 003-Delete Node in a Linked List

开荒Leetcode: NO.003 Delete Node in a Linked List


最近晚上决定睡得比较早,于是更新就慢下来了。

DFS和BFS还有递归写法,速度更快一些,留坑待填。

题目大意:
写个函数用于删除单链表中的某一个结点n,
输入参数为该结点n, 并不能得到头

基本思路:
直觉上就是三步,

    1. 复制下一节点值
    2. 指向下下节点
    3. 删除下一节点

感觉这道题非常的基础呃,为什么通过率会比前两道低呢?


题外话:

去了广图,没有网络,所以手写一个简单的单链表,作为测试

#singly-Linked List 用于测试的

# Node first
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

# Then Linked List
class sLL(object):
    # 使用列表作为初始化输入
    def __init__(self, dList):
        if dList == None:
            raise ValueError("Empty List")
        self.head = ListNode(dList[0])
        begin = self.head
        for value in dList[1:]:
            next = ListNode(value)
            begin.next, begin = next, next

我的解法

class Solution(object):
    #这条用于离线测试的
    def __init__(self, dList):
        self.linklist = sLL(dList)
        self.length = len(dList)
        self.result = dList

    # 此处正解
    def deleteNode(self, node):
        next = node.next
        node.val = next.val
        node.next = next.next
        del next

    def printL(self):
        read_node = self.linklist.head
        while read_node is not None:
            print(read_node.val),
            read_node = read_node.next

    def test(self, k):
        del_node = self.linklist.head
        for i in xrange(0,self.length):
            if del_node.val == self.result[k]:
                break
            del_node = del_node.next
        self.deleteNode(del_node)
        self.printL()
        print('')
        del(self.result[k])
        for i in self.result: print i,

刚刚上传测试了下,速度还是比较慢呃,可能需要优化一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值