开荒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,
刚刚上传测试了下,速度还是比较慢呃,可能需要优化一下