題目:有乙個線性表(a1,a2,a3,....,an),採用帶頭節點的單鏈表l儲存,設計乙個演算法將其就地逆置。所謂「就地」指輔助空間應該為o(1)。
方法一:
採用頭插法
先將l的頭節點head的next域置為null變成乙個空鍊錶,然後用p結點採用頭插法插入到l中。
static node headinsert(node head)
else
return q;
}}
方法二:
先將首節點的next置為null,用p,q指向單鏈表中相鄰的兩節點,將r指向q的下乙個結點,然後同步後移。當q=null時,表示指向原單鏈表的尾結點,將l的next域指向p即可。
static node invert(node head)
else
head.next = null;
head = p;
return head;
}}
單鏈表就地逆置
思路為定義四個工作指標p back p q back q,然後先將p q從鍊錶中摘下,在分別在p back後和q back後插入。最後在重新定位工作指標。注意點 若先全部摘下,否則在中點相遇時p和q back會重疊,使得鍊錶斷開,所以當長度為偶數時到達中點的兩個節點時要跳出迴圈,另外直接交換兩者 迴...
單鏈表就地逆置
就地逆置鍊錶 分析 我們採用頭插法或者相鄰節點直接修改指向的方法來進行逆置。如下 struct link define crt secure no warnings include include void reverse link h h next pre 頭指標指向最後乙個節點 q next n...
單鏈表的就地逆置
單鏈表的就地逆置是指輔助空間o 1 的逆置方法,有兩種方法 普通迴圈 頭插法重新建立帶頭節點的新鍊錶 和遞迴。下面我們詳細介紹這兩種方法 方法一 頭插法 演算法思想 逆置鍊錶初始為空,表中節點從原煉表中依次 刪除 再逐個插入逆置鍊錶的表頭 即 頭插 到逆置鍊錶中 使它成為逆置鍊錶的 新 的第乙個結點...