【說明】:
本文是左程雲老師所著的《程式設計師面試**指南》第二章中「反轉單向和雙向鍊錶」這一題目的c++復現。
本文只包含問題描述、c++**的實現以及簡單的思路,不包含解析說明,具體的問題解析請參考原書。
感謝左程雲老師的支援。
【題目】:
分別實現反轉單向鍊錶和反轉雙向鍊錶的函式。
【要求】:
如果鍊錶長度為 n,時間複雜度要求為 o(n),額外的空間複雜度要求為 o(1)。
【思路】:
鍊錶的反轉用到了三個節點指標,分別為:當前(head)、之前(pre)、之後(next)。
【編譯環境】:
centos6.7(x86_64)
gcc 4.4.7
【實現】:
實現及測試**:
1/*2view code*檔名: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 }
注:感謝左程雲老師的支援。
反轉單向和雙向鍊錶
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...