Python:在链表中移动';下一个';
我正在破解第六版的编码面试,不确定他们对“下一个”的定义 可以找到他们定义“链表”的代码。我正在尝试第二个练习,即从随机链表的结束元素中查找第k个 我的代码:Python:在链表中移动';下一个';,python,linked-list,singly-linked-list,Python,Linked List,Singly Linked List,我正在破解第六版的编码面试,不确定他们对“下一个”的定义 可以找到他们定义“链表”的代码。我正在尝试第二个练习,即从随机链表的结束元素中查找第k个 我的代码: from LinkedList import LinkedList def kth_to_last(ll, k): num_seen = 0 length_list = count_length(ll) val = ll.head # ISSUE IS HERE while val.next
from LinkedList import LinkedList
def kth_to_last(ll, k):
num_seen = 0
length_list = count_length(ll)
val = ll.head
# ISSUE IS HERE
while val.next != None:
print 'hi'
val.next = val.next.next
"""
while num_seen < (length_list - k):
val = val.next
num_seen += 1
"""
return val.next
# Counts length of LL
def count_length(ll):
val = ll.head
count = 1
while val.next != None:
count += 1
val.next = val.next.next
return count
ll = LinkedList()
ll.generate(10, 0, 99)
print(ll)
kth_to_last(ll, 3)
def kth_to_last(ll, k):
"""
num_seen = 0
length_list = count_length(ll)
"""
# Start at head
val = ll.head
while val.next != None:
print val.next
val = val.next
这会很好地打印列表您应该执行
val=val.next
而不是val.next=val.next.next
。按照您的操作方式,当您调用count\u length
时,列表将被截断为单个元素。由于您在kth\u to\u last
的顶部执行count\u length
,因此当您开始查看列表时(您的'hi'
所在位置),列表已缩减为单个节点
请记住,a是一种结构,其中每个节点的next
属性是指向下一个节点的指针。您的代码正在修改next
的值,这将更改链接列表的结构
处理链接列表时(在count_length
中,或在kth_to_last
中),您要做的是依次指向每个节点。您没有试图修改节点本身,因此不会为其值
或下一个
属性赋值。实现这一点的方法是更改指针(val
)指向的对象,并且您希望它指向下一个节点的对象是沿途的下一个节点。因此:
val = ll.head
while val is not None:
# do something with val here
val = val.next
您应该执行
val=val.next
而不是val.next=val.next.next
。按照您的操作方式,当您调用count\u length
时,列表将被截断为单个元素。由于您在kth\u to\u last
的顶部执行count\u length
,因此当您开始查看列表时(您的'hi'
所在位置),列表已缩减为单个节点
请记住,a是一种结构,其中每个节点的next
属性是指向下一个节点的指针。您的代码正在修改next
的值,这将更改链接列表的结构
处理链接列表时(在count_length
中,或在kth_to_last
中),您要做的是依次指向每个节点。您没有试图修改节点本身,因此不会为其值
或下一个
属性赋值。实现这一点的方法是更改指针(val
)指向的对象,并且您希望它指向下一个节点的对象是沿途的下一个节点。因此:
val = ll.head
while val is not None:
# do something with val here
val = val.next
谢谢@Wildwillhelm,这很有道理,我会解决这个问题。所以问题似乎在于我调用“count_length”,因为如果我把它注释掉,那么val_next就可以了。为什么计算长度会改变ll?谢谢你@Wildwillhelm,我刚刚看到你的完整评论——这完全有道理。非常感谢。谢谢@Wildwillhelm,这很有道理,我会解决这个问题。所以问题似乎在于我调用“count_length”,因为如果我把它注释掉,那么val_next就可以了。为什么计算长度会改变ll?谢谢你@Wildwillhelm,我刚刚看到你的完整评论——这完全有道理。非常感谢。