Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在链表中移动';下一个';_Python_Linked List_Singly Linked List - Fatal编程技术网

Python:在链表中移动';下一个';

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

我正在破解第六版的编码面试,不确定他们对“下一个”的定义

可以找到他们定义“链表”的代码。我正在尝试第二个练习,即从随机链表的结束元素中查找第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 != 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,我刚刚看到你的完整评论——这完全有道理。非常感谢。