如何call/instantiate链表
How to call/instantiate linked list
我正在尝试call/print以下链表:
#--the following code is taken from the most upvoted solution at codesignal--
class ListNode(object):
def __init__(self, x):
self.value = x
self.next = None
def removeKFromList(l, k):
c = l
while c:
if c.next and c.next.value == k:
c.next = c.next.next
else:
c = c.next
return l.next if l and l.value == k else l
我想 call/instantiate class 和 l = [3, 1, 2, 3, 4, 5] and k = 3
我希望 return => [1, 2, 4, 5]
基本上,我无法首先实例化 ListNode
class 然后在其中调用 removeKFromList
方法。
您可以在以下位置找到此挑战:https://app.codesignal.com/interview-practice/task/gX7NXPBrYThXZuanm/description
描述:
Note: Try to solve this task in O(n) time using O(1) additional space, where n is the number of elements in the list, since this is what you'll be asked to do during an interview.
Given a singly linked list of integers l and an integer k, remove all elements from list l that have a value equal to k.
Example
For l = [3, 1, 2, 3, 4, 5]
and k = 3
, the output should be
removeKFromList(l, k) = [1, 2, 4, 5]
For l = [1, 2, 3, 4, 5, 6, 7]
and k = 10
, the output should be
removeKFromList(l, k) = [1, 2, 3, 4, 5, 6, 7]
Input/Output
execution time limit: 4 seconds (py3)
input: linkedlist.integer l
A singly linked list of integers.
Guaranteed constraints:
- 0 ≤ list size ≤ 105,
- -1000 ≤ element value ≤ 1000.
input: integer k
An integer.
Guaranteed constraints:
- -1000 ≤ k ≤ 1000.
output: linkedlist.integer
Return l
with all the values equal to k
removed.
看了大家的评论,这里有一些误会需要解决:
如何创建列表
您似乎希望其中之一创建列表:
a = ListNode({})
或
a = ListNode
两者都不是您所需要的。 ListNode
构造函数将创建潜在链表的 one 节点,但您必须“自己”建立链接。将 {}
传递给该构造函数没有什么意义:{}
是一个字典,与此数据结构无关。第二种形式甚至不会 调用 构造函数,它只是将 class 对象复制到您的变量 a
,这不是您想要的。
用非常冗长的术语来说,示例列表是这样创建的:
l = ListNode(3)
l.next = ListNode(1)
l.next.next = ListNode(2)
l.next.next.next = ListNode(3)
l.next.next.next.next = ListNode(4)
l.next.next.next.next.next = ListNode(5)
这应该突出列表是如何创建的,但当然它看起来不太实用。往下看更好的方法。
如何调用函数
您在评论中提到了以下通话:
a.removeKFromList([1,2,3], 3)
但这有两个问题:
它假定 removeKFromList
是 ListNode
的 方法 (因为你在它前面加上了 a.
),但它应该是一个简单的函数,而不是一个方法
第一个参数是一个标准列表,但代码挑战告诉你它需要一个链表作为第一个参数
您需要按如下方式调用您的函数:
result = removeKFromList(l, 3)
实用函数
要测试您的代码,请添加以下函数,这将帮助您实例化链表(从标准列表)并验证链表的内容(通过迭代其值):
def createList(lst):
head = None
for val in reversed(lst):
node = ListNode(val)
node.next = head
head = node
return head
def iterList(head):
while head:
yield head.value
head = head.next
这些将简化您的测试。
所以现在您的驱动程序代码——用于将输入转换为输出——可以是:
# define the input
l = createList([3, 1, 2, 3, 4, 5])
k = 3
# run your algorithm
result = removeKFromList(l, 3)
# verify it
print(*iterList(result))
这会输出给定示例的预期输出。
我正在尝试call/print以下链表:
#--the following code is taken from the most upvoted solution at codesignal--
class ListNode(object):
def __init__(self, x):
self.value = x
self.next = None
def removeKFromList(l, k):
c = l
while c:
if c.next and c.next.value == k:
c.next = c.next.next
else:
c = c.next
return l.next if l and l.value == k else l
我想 call/instantiate class 和 l = [3, 1, 2, 3, 4, 5] and k = 3
我希望 return => [1, 2, 4, 5]
基本上,我无法首先实例化 ListNode
class 然后在其中调用 removeKFromList
方法。
您可以在以下位置找到此挑战:https://app.codesignal.com/interview-practice/task/gX7NXPBrYThXZuanm/description
描述:
Note: Try to solve this task in O(n) time using O(1) additional space, where n is the number of elements in the list, since this is what you'll be asked to do during an interview.
Given a singly linked list of integers l and an integer k, remove all elements from list l that have a value equal to k.
Example
For
l = [3, 1, 2, 3, 4, 5]
andk = 3
, the output should beremoveKFromList(l, k) = [1, 2, 4, 5]
For
l = [1, 2, 3, 4, 5, 6, 7]
andk = 10
, the output should beremoveKFromList(l, k) = [1, 2, 3, 4, 5, 6, 7]
Input/Output
execution time limit: 4 seconds (py3)
input:
linkedlist.integer l
A singly linked list of integers.
Guaranteed constraints:
- 0 ≤ list size ≤ 105,
- -1000 ≤ element value ≤ 1000.
input:
integer k
An integer.
Guaranteed constraints:
- -1000 ≤ k ≤ 1000.
output:
linkedlist.integer
Return
l
with all the values equal tok
removed.
看了大家的评论,这里有一些误会需要解决:
如何创建列表
您似乎希望其中之一创建列表:
a = ListNode({})
或
a = ListNode
两者都不是您所需要的。 ListNode
构造函数将创建潜在链表的 one 节点,但您必须“自己”建立链接。将 {}
传递给该构造函数没有什么意义:{}
是一个字典,与此数据结构无关。第二种形式甚至不会 调用 构造函数,它只是将 class 对象复制到您的变量 a
,这不是您想要的。
用非常冗长的术语来说,示例列表是这样创建的:
l = ListNode(3)
l.next = ListNode(1)
l.next.next = ListNode(2)
l.next.next.next = ListNode(3)
l.next.next.next.next = ListNode(4)
l.next.next.next.next.next = ListNode(5)
这应该突出列表是如何创建的,但当然它看起来不太实用。往下看更好的方法。
如何调用函数
您在评论中提到了以下通话:
a.removeKFromList([1,2,3], 3)
但这有两个问题:
它假定
removeKFromList
是ListNode
的 方法 (因为你在它前面加上了a.
),但它应该是一个简单的函数,而不是一个方法第一个参数是一个标准列表,但代码挑战告诉你它需要一个链表作为第一个参数
您需要按如下方式调用您的函数:
result = removeKFromList(l, 3)
实用函数
要测试您的代码,请添加以下函数,这将帮助您实例化链表(从标准列表)并验证链表的内容(通过迭代其值):
def createList(lst):
head = None
for val in reversed(lst):
node = ListNode(val)
node.next = head
head = node
return head
def iterList(head):
while head:
yield head.value
head = head.next
这些将简化您的测试。
所以现在您的驱动程序代码——用于将输入转换为输出——可以是:
# define the input
l = createList([3, 1, 2, 3, 4, 5])
k = 3
# run your algorithm
result = removeKFromList(l, 3)
# verify it
print(*iterList(result))
这会输出给定示例的预期输出。