翻轉鍊錶演算法和實現

2021-09-23 00:07:11 字數 2147 閱讀 3652

2 **實現

3 執行結果

寫個翻轉鍊錶演算法,剛開始想到乙個不錯的思路。這個思路執行效率不低,時間複雜度為o(n);可以不用分配額外的節點空間,空間複雜度為o(0)。現在把思路整理一下,並實現**,測試執行結果。

用乙個while順序遍歷這個鍊錶,然後把遍歷到每個節點插入到鍊錶頭部。

藍色箭頭即賦值符號,比如在第2個結點的操作:

while遍歷條件可根據back不為空,即while(back)

struct lnodelnode, *linklist; // linklist相當於lnode*,即:struct lnode*

// 尾插法建立單鏈表l

linklist listcreat_fromtail(linklist l);

// 翻轉鍊錶l的演算法

linklist reverse_linklist(linklist l);

// 把節點node插入鍊錶l頭部

linklist insert_head(linklist l, lnode * node);

// 輸出鍊錶l元素, flag=0為鍊錶翻轉前,flag=1為鍊錶翻轉後

void print_linklist(linklist l, int flag);

int main(int argc, char *ar**)

// 翻轉鍊錶l的演算法

linklist reverse_linklist(linklist l)

//back = front = null; // for secure

return l;

}// 把節點node插入鍊錶l頭部

linklist insert_head(linklist l, lnode * node)

// 輸出鍊錶l元素, flag=0為鍊錶翻轉前,flag=1為鍊錶翻轉後

void print_linklist(linklist l, int flag)

puts("\n");

}//尾插法建立單鏈表l

linklist listcreat_fromtail(linklist l)

return l;

}

huashidazhongbeitushuguandeimac-2

:wu_being duzhe$ vim reverse_linklist.c

huashidazhongbeitushuguandeimac-2

:wu_being duzhe$ gcc reverse_linklist.c

huashidazhongbeitushuguandeimac-2

:wu_being duzhe$ ./a.out

請輸入插法建立單鏈表長度:5

請逐個輸入鍊錶元素:123

45翻轉前:

單鏈表元素個數:5, 分別是:123

45 翻轉後:

單鏈表元素個數:5, 分別是:543

21 huashidazhongbeitushuguandeimac-2

:wu_being duzhe$ ./a.out

請輸入插法建立單鏈表長度:3

請逐個輸入鍊錶元素:123

4翻轉前:

單鏈表元素個數:3, 分別是:123

翻轉後:

單鏈表元素個數:3, 分別是:321

如果你看完這篇博文,覺得對你有幫助,並且願意付贊助費,那麼我會更有動力寫下去。

經典演算法 鍊錶翻轉

比如說乙個鍊錶先是這樣,40 5 0 60 反過來就應該是 60 0 5 40 函式如下 static void reverse struct node head ref head ref prev 代表著最後乙個 傳進去的引數是煉表頭 原理就是把鍊錶都反過來指,最後乙個指向倒數第二個,方法是通過上...

初級演算法 翻轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路1 迭代 思路很簡單 使用三個指標 迴圈使後乙個指向前乙個 再用第三個指標儲存沒有翻轉的剩餘指標的位置 自己敲得程式執行不出結果 class...

鍊錶翻轉和排序

鍊錶的翻轉 鍊錶的節點由資料域與指標域構成,針對鍊錶的翻轉採用三個指標p,q,r,p指向頭結點,q指向p的下乙個節點,r指向q的下乙個節點,p,q,r三個指標遍歷整個鍊錶,將q p next 寫成q next p 因此就將p指向q的指標反轉成q指向p。如下 include include inclu...