單鏈表的應用 就地逆置

2021-07-05 17:28:05 字數 776 閱讀 9631

【問題描述】試實現線性表的就地逆置演算法,即在原表的儲存空間將線性表(a1,a2,a3....an)逆置為(an...a3,a2,a1).

[分析]就地逆置就是不需要額外申請結點空間,只需要利用原來的表中的結點空間。若對順序表中的元素進行逆置,可   以借助「交換」前後相應元素的方法實現,但是對於單鏈表就不能「交換」,時間複雜度就會達到o(n^2)。

【思想】逆置後的單鏈表初始化為空表,表中的結點不是新生成的,而是從原煉表中依次「刪除」,再逐個以頭插法放置到逆置表中,如此迴圈,直至原煉表為空表止。

#include #include #define elemtype char

typedef struct node /*結點型別定義*/

node, *linklist; /* linklist為結構指標型別*/

linklist createfromtail()

/*通過鍵盤輸入表中元素值,利用尾插法建單鏈表,並返回該單鏈表頭指標l*/

else

} return l;

} void reverselist(linklist l) }

int main()

reverselist(l);

printf("逆置後的單鏈表為:\n");

p = l->next;

while(p!=null)

printf("\n");

return 0;

}

單鏈表就地逆置

思路為定義四個工作指標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 的逆置方法,有兩種方法 普通迴圈 頭插法重新建立帶頭節點的新鍊錶 和遞迴。下面我們詳細介紹這兩種方法 方法一 頭插法 演算法思想 逆置鍊錶初始為空,表中節點從原煉表中依次 刪除 再逐個插入逆置鍊錶的表頭 即 頭插 到逆置鍊錶中 使它成為逆置鍊錶的 新 的第乙個結點...