反轉單向和雙向鍊錶

2022-04-06 00:07:43 字數 2045 閱讀 2035

【說明】:

本文是左程雲老師所著的《程式設計師面試**指南》第二章中「反轉單向和雙向鍊錶」這一題目的c++復現。

本文只包含問題描述、c++**的實現以及簡單的思路,不包含解析說明,具體的問題解析請參考原書。

感謝左程雲老師的支援。

【題目】:

分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。

【要求】:

如果鍊錶長度為 n,時間複雜度要求為 o(n),額外的空間複雜度要求為 o(1)。

【思路】:

鍊錶的反轉用到了三個節點指標,分別為:當前(head)、之前(pre)、之後(next)。

【編譯環境】:

centos6.7(x86_64)

gcc 4.4.7

【實現】:

實現及測試**:

1/*2

*檔名:lists_reverse.cpp34

*摘要:反轉單雙向鍊錶5*/

67 #include 8

9using

namespace

std;

1011

struct

singlenode12;

1617

struct

doublenode18;

2324 singlenode* reverselist(singlenode *head)

2536

return

pre;37}

3839 doublenode* reverselist(doublenode *head)

4052

return

pre;53}

5455

void printlist(singlenode *head)

5662 cout <

6465

void printlist(doublenode *head)

6672 cout <

7475

intmain()

7697 sptr->next = new

singlenode;

98 sptr = sptr->next;

99 sptr->value =i;

100 sptr->next =null;

101102 dptr->next = new

doublenode;

103 dptr->next->pre =dptr;

104 dptr = dptr->next;

105 dptr->value =i;

106 dptr->next =null;

107}

108 cout << "

singlenode before reversed:

"<

109printlist(shead);

110 cout << "

singlenode after reversed:

"<

111 shead =reverselist(shead);

112printlist(shead);

113114 cout << "

doublenode before reversed:

"<

115printlist(dhead);

116 cout << "

doublenode after reversed:

"<

117 dhead =reverselist(dhead);

118printlist(dhead);

119return0;

120 }

view code

注:感謝左程雲老師的支援。

反轉單向和雙向鍊錶

package class 03 反轉單向和雙向鍊錶 題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。要求 如果鍊錶長度為n,時間複雜度要求為o n 額外空間 複雜度要求為o 1 public class code 07 reverselist public static node reversel...

反轉單向和雙向鍊錶

package practice 反轉單向和雙向鍊錶 題目 分別實現反轉單向鍊錶和反轉雙向鍊錶的函式 要求 如果鍊錶長度為n,時間複雜度要求為o n 額外空間複雜度要求為o 1 author colin.chen public class revisenode public static node ...

004 反轉單向和雙向鍊錶

package com.my.util 單向鍊錶節點 public class singlenode package com.my.util 雙向鍊錶節點 public class doublenode package com.my.suanfa import com.my.util.doublen...