当我试图使链表的节点p
的next
属性指向None
时,我使用p.next = None
。但是如果我想让节点对应p.next
到None
呢?
一个例子是当尝试旋转链表时,它以节点的next
等于None
结束,我想使新列表的最后一个元素的next
指向None
,但我认为我一直在删除它指向的元素。
这是我的代码旋转列表的k
位置。如果您想查看问题的完整描述,请参阅此处
def rotate(head, k):
'''
head is pointer to the head, k is the number of positions to rotate
'''
if not head or k == 0:
return head
p = head
d = head
counter = 1
while p.next != None:
counter += 1
p = p.next
out = ListNode(0)
if k % counter == 0:
return head
if counter < k:
counter = counter % k
for _ in range(counter):
p.next = d
d = d.next
p = p.next
out = p
d.next.next = None
return out
听起来您想要获取最后的k
值并将它们附加到前面。
p.next
是下一个节点。一般来说,当我们想要改变p
的next
时,我们需要抓取temp = p.next p.next = newNode
,然后我们可以继续。
在这种情况下,我会找到列表的长度,设置tail.next = head
,减去k
(考虑环绕),然后向前走到N-k
,并设置该节点的p.next = None
类似:
p, len, prev = head, 0, None
while p:
prev = p
p = p.next
len += 1
# prev is tail, set it's next to head
prev.next = head
# find the node to detach
p = head
for i in xrange(len):
p = p.next
p.next = None
你需要找出角落的情况