2016-11-16 46 views
0

當我嘗試使next屬性的鏈接列表的節點p指向None時,我使用p.next = None。但是如果我想讓節點對應p.nextNone呢?設置列表旁邊沒有

一個例子是,當嘗試旋轉一個鏈表,它與節點的next等於None,我想使新的列表的最後一個元素的nextNone,但我覺得我一直在刪除它指向的元素結束至。

這裏是我的代碼,通過k位置來旋轉列表。如果你想看到這個問題的完整描述見here

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 
+0

這是一個代碼片段,您可以發佈您的完整代碼? –

+0

實際上,[mcve]可能更好@Laurent – boardrider

+0

增加了函數頭,用於讀取指針,頭部和要旋轉的位置數量k。 –

回答

0

聽起來像是你想利用最後k值,並將其添加到前面。

p.next是下一個節點。一般來說,當我們想要更改pnext時,我們需要抓取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 

你需要弄清楚極端情況