單鏈表逆序 多種方法總結

2021-08-02 03:45:36 字數 936 閱讀 5596

經常會碰到一道關於鍊錶的題目——鍊錶逆序,今天就來進行一下總結

一. 使用額外記憶體空間實現

和陣列逆序一樣,鍊錶的逆序也可以使用額外的結點空間做中轉,但這也分有兩種思路。

假設鍊錶為a->b->c->d->e

1.先取出鍊錶的最後乙個e,然後將e作為新鍊錶的頭, 再依次取出原來鍊錶的最後乙個節點,插入到新鍊錶的最後位置。

2.取出原始鍊錶的第乙個節點a,然後將該節點作為新鍊錶的頭節點,再依次取出原來鍊錶的第乙個節點,插入到新鍊錶的位置。

具體實現:

二. 不使用額外記憶體空間

一般更推薦不使用額外空間的方法,面試中得的分數也會高一點。

迴圈實現:

link * reverselink(link *head)

return prev;

}

遞迴實現:

link * reverselink2(link *head)

newhead = reverselink2(head->next);

head->next->next = head;

head->next = null;

return newhead;

}

對於線性

資料結構

,比較適合用迭代迴圈方法,而對於樹狀資料結構,比如二叉樹,遞迴方法則非常簡潔優雅。

單鏈表逆序的多種方式

template void list inverse first link prev 最後連上附加頭結點 link node reverselink link node head return prev 單鏈表反轉 逆序 status listreverse linklist l printf cu...

單鏈表逆序三種方法

需要三個指標,前驅p1,當前p2,後繼p3 結束的條件是p2 null void reverse1 pnode head p1 p2 p2 p3 head next p1 head變成新頭節點返回 else return pnode reverse1 pnode head p1 p2 p2 p3 r...

單鏈表反轉 逆序的兩種方法

摘自 延伸閱讀 此文章所在專題列表如下 第01話 線性表的概念與定義 第02話 線性表的抽象資料型別adt定義 第03話 線性表的順序儲存結構 第04話 線性表的初始化 第05話 線性表的遍歷 插入操作 第06話 判斷線性表是否為空與置空操作 第07話 線性表的查詢操作 第08話 線性表刪除某個元素...