鍊錶系列文章 三

2022-08-16 12:24:15 字數 1398 閱讀 6833

基本資料結構:

struct

listnode

};

1.  反轉鍊錶

方法一:堆疊法,利用棧後進先出的特性,將鍊錶節點依次入棧,然後彈出並修改next指標

時間複雜度o(n),空間複雜度o(n)

1 listnode *reverselist(listnode *head) 

7 h->next =null;

8return

newhead.next;

9 };

方法二:頭插法,建立乙個新的頭節點,然後遍歷鍊錶節點,將每個節點依次插入到頭節點後

時間複雜度o(n),空間複雜度o(1)

1 listnode *reverselist(listnode *head) 

10return

newhead.next;

11 };

方法三:前插法,把鍊錶分為兩部分,依次把後一部分的節點前插到前一部分

時間複雜度o(n),空間複雜度o(1)

1 listnode *reverselist(listnode *head) 

11return

prev;

12 };

2.  反轉鍊錶的[m, n]區間的節點

和反轉鍊錶的區別是,我們必須儲存反轉後的尾指標,使其指向第n+1個節點

方法二:頭插法,時間複雜度o(n),空間複雜度o(1)

listnode *reverselist( listnode *list, int m, int

n ) //

phead->next指向第m個節點

prev = phead->next;//

prev指向反轉區間的尾部

curr = prev->next;//

指向反轉區間的頭部

while( n--)

return head->next;

}

3. 給定兩個指標begin和end,反轉begin->...->end之間的節點,返回反轉後的倒數第乙個節點指標

方法參考 2.  反轉鍊錶的[m, n]區間的節點

1 listnode* reverselist(listnode *prev, listnode *begin, listnode *end) 

8 begin->next =end_next;//這裡的begin->next其實就是尾指標!!!

9 prev->next =end;

10return

begin;

11 }

4. 小結

反轉鍊錶本身比較簡單,但是當要區間反轉時,一定要牢記,不能忘了尾指標!!!

鍊錶系列 鍊錶環相關問題

設定兩個節點 slow fast,若存在環,分別從鍊錶的頭節點出發,乙個每次向後移動一步,另乙個移動兩步,兩個指標移動速度不一樣,如果存在環,那麼兩個指標一定會在環裡相遇。public boolean hascircle node head node slow head node fast head...

SQL Server 表分割槽實戰系列(文章索引)

本文所涉及的內容 contents 前言 introduction 實戰說明 in action 表分割槽邏輯結構圖 construction 表分割槽學習流程圖 study step 系列文章索引 catalog 總結 待續.summary to be continued 前段時間在忙資料庫的表分...

鍊錶系列二 鍊錶的C 表示

這裡以單鏈表為例闡述如何用c 實現表的基本表示 1 表的結構 通過開始結點a0可以訪問整個表元素,最後的乙個結點的指標為null。2 引入表頭結點 在實現中,為了實現對各個結點的處理的一致性,引入了乙個頭結點,頭結點是指向鍊錶開始結點a0的結點,這樣一來鍊錶的所有結點都有了前驅結點,開始結點 鍊錶實...