我必須編寫一個函數來反轉一個雙向鏈表,以便尾部成爲頭部。反向雙向鏈表
例如,之前的元素: {(1,1),(1,2),(2,2),(2,3)}
後: {(2,3) ,(2,2),(1,2),(1,1)}
這裏的結構:
struct snake {
unsigned int i;
unsigned int j;
struct snake *next;
struct snake *prev;
};
這是函數prototipe我必須使用:
void snake_reverse(struct snake **s);
我想這樣的事情和其他一些嘗試
void snake_reverse(struct snake **s) {
struct snake *last, *tmp = NULL;
last = *s;
while (last != NULL)
{
tmp = last->prev;
last->prev = last->next;
last->next = tmp;
last = last->prev;
}
if(tmp != NULL)
*s = tmp->prev;
}
也試過這樣:
while (last != NULL)
{
tmp = last->next;
last->next = last->prev;
last->prev = tmp;
last = tmp;
}
if(tmp != NULL)
*s = tmp;
,但他不工作。我幾乎可以肯定我沒有錯。 列表的第一個 - > prev是NULL,列表的最後 - >下一個是NULL。
我沒有得到任何錯誤或崩潰,但該函數的任務是通過反轉所有元素並更改列表頭來反轉蛇的方向。 你能說這裏有什麼問題嗎?
編輯:問題是在另一個程序模塊不是由我做的。
無論如何,最好的解決方案是kmkaplan。謝謝大家
當你描述一個問題時,你不能說「它不工作」;如果你更精確一些,這會更好:這是我所做的,期望的輸出是X,但我有Y(或者:有錯誤信息Z的崩潰)。也許實際的錯誤在於你測試你的功能的方式。 – coredump
另請參閱'last = last-> prev':是否有意義使用last = tmp? – coredump
@coredump對不起,如果我不能更具體,但這個功能被用作程序中的模塊,我無法控制程序的其餘部分。 無論如何,我沒有任何錯誤或崩潰,但功能的任務是顛倒所有元素並改變列表的頭部來顛倒蛇的方向。 last-> prev有last-> next的地址導致我們切換它們。 tmp has last-> prev。所以他們是不同的 – RUsl