將乙個雙向鍊錶逆置的正確姿勢

2021-07-12 00:26:40 字數 850 閱讀 8982

雙向鍊錶中含有資料成員_data,_prev,_next,也就是說資料節點前後都有乙個指向前乙個節點和後乙個節點的指標。然而要想實現雙向鍊錶的逆置,首先我們先來了解一下單鏈表的逆置

單鏈表的逆置,所採用的方法是頭插法,所謂的頭插法就是新建乙個newhead指標,這個指標永遠指向新的鍊錶的頭節點_head,然後從原煉表中「摘取」節點連線到新的鍊錶上,以下是c++**實現:

void resever()

_head = newhead;

}

上述的「摘取」就是將頭節點與鍊錶斷開,與新鍊錶鏈結。cur節點與原鍊錶斷開時要記得儲存cur->next節點,所以新建乙個臨時變數tmp儲存起來。

對照單鏈表的逆置我們就可以寫出爽鍊錶的逆置的第一種實現方法,後面還有更加簡便的方法。

void resever()

_head = newhead;

}

這種方法實現起來和單鏈表一樣,只是多了tmp->_prev = cur;這乙個語句,下面是實現的第二種方法:

void resever()

}

這種方法的核心思想就是只交換節點中的資料成員_data,其他的前後指標不變,這種方法也是比較簡便的。但是要注意while語句的迴圈條件while (begin != end && begin->_prev != end),找到了這兩種情況就可以成功達到結束條件。下面還有一種也是比較方便的方法:

void resever()

}

這種方法是不是看起來要更加簡便一點呢。這種方法就是先交換頭尾指標,然後逐個交換節點的前指標和後指標,達到逆置的效果。

乙個雙向鍊錶的實現

本來是想改改算了,最後變成全部重寫。既然都是自己寫的,也算是原創吧!struct node node intval,node nextnode,node priornode data val next nextnode prior priornode node headnode new node n...

用棧逆置乙個線性表

include include define stack init size100 define stackincrement10 typedef struct lnodelnode,linklist typedef structsqstack void initlist linklist l vo...

總結 逆置雙向鍊錶的三種方法

雙向鍊錶的遍歷要比單向鍊錶方便很多,所以逆置方法要比單鏈表豐富很多,因為可以從後向前遍歷,所以可以像逆置陣列一樣進行操作,也可以根據單鏈表的特性進行逆置,也可以用雙鏈表獨有的特性進行逆置。具體方法如下 鍊錶的類定義如下 typedef int datatype class dsnode privat...