2017-10-17 94 views
-4

我想嘗試一個函數使一個鏈表逆轉。 A查找了一些代碼,但我不明白他們的算法。任何人都可以解釋這是如何工作的(內部解決方案)?一些嘗試過的東西,但沒有奏效。顛倒方式一個鏈表

當前代碼:

void rvrprint(struct node *go) 
{ 
    struct node *tmp; 
    struct node *onc=NULL; 

    struct node *snk; 
    tmp=go; 
    while(tmp!=NULL) 
    { 
     snk = tmp->next; 
     tmp->next=onc; 
     tmp=snk; 
     printf("%d\n",tmp->x); 
    } 
    head = tmp; 
} 
+1

你嘗試了一些東西,但它沒有奏效。那麼,你嘗試了什麼,它以什麼方式不起作用? – klutt

+1

您需要指定您的數據結構,並且還應該包含您嘗試的解決方案,以便其他人可以指出需要更改的內容。 Stackoverflow不是一個代碼寫作服務,你來空手和離開一個完整的解決方案 – grek40

+0

是的,但我想解釋它的算法,不想寫我的代碼。 – frogwine

回答

1

你可以看一下單鏈表作爲堆棧。如果你這樣做,那麼你應該很快就會意識到,最簡單的方法是將第一個節點添加到新列表中(節點推入新堆棧)。然後取第二個節點並添加到新列表中(再次推入新堆棧)。

在此之後,您應該看到前兩個節點的順序相反。當你瀏覽整個原始列表時,這將繼續,並將其節點「推」到新列表中。

0

我想你想實現這一點:

enter image description here

但你你說你的自我:您的代碼不工作!

那麼,你錯過了循環內的一個重要步驟。

您應該能夠通過研究上面的圖形並與代碼進行比較來找到它。如果沒有,滴:-)

評論BTW:這看起來也錯

head = tmp; 

tempNULL