雙向鍊錶的遍歷要比單向鍊錶方便很多,所以逆置方法要比單鏈表豐富很多,因為可以從後向前遍歷,所以可以像逆置陣列一樣進行操作,也可以根據單鏈表的特性進行逆置,也可以用雙鏈表獨有的特性進行逆置。具體方法如下:
鍊錶的類定義如下:
typedef int datatype;
class dsnode
private:
dsnode*_prev;
dsnode*_next;
datatype _data;
};class dnslist
~dnslist()
dnslist(const dnslist &l) }
dnslist operator = (dnslist l) }
public:
// 頭插/頭刪/尾插/尾刪
void pushback(const datatype& x);
void popback();
void pushfront(const datatype& x);
void popfront();
// 插入/查詢/刪除
void insert(dsnode* pos, const datatype& x);
dsnode* find(const datatype& x);
void erase(const datatype& x);
//void reverse();//同一空間複雜度不需要返回值
dnslist* reverse();//不同空間複雜度通過鍊錶指標返回
// 列印
void print();
private:
void _clear() }
dsnode *_head;
dsnode *_tail;
};
在單一空間複雜度下:
1.通過頭尾指標向中間遍歷,交換所儲存的內容。
void dnslist::reverse()
}
2.單純通過頭指標向後遍歷,交換每個節點的前驅與後繼。
void dnslist::reverse()
}
在多重空間複雜度下:
建立新的雙向鍊錶指標,將目標鍊錶從前向後遍歷/從後向前遍歷,把每個節點的元素進行頭插/尾插。
dnslist* dnslist::reverse()
return newlist;
}
如有不足或錯誤,希望批評指正。
本文出自 「pawnsir的it之路」 部落格,請務必保留此出處
鍊錶逆置 三種方法詳解
achievek 本題要求實現乙個函式,將給定的單鏈表逆轉。函式介面定義 list reverse list l 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型別 l是給定單鏈表...
python程式設計練習 三種方法實現鍊錶的逆序
鍊錶的儲存特點 可以用任意一組儲存單元來儲存單鏈表中的資料元素,而且除了儲存每個資料元素外,還必須儲存 指示其直接後繼元素的資訊 實現鍊錶的逆序 方法1 就地逆序 在遍歷鍊錶的時候,修改當前結點指標域的指向,讓其指向它的前驅結點。需要用乙個指標變數來儲存前驅結點的位址,此外為了在調整當前結點指標域的...
鍊錶建立的三種方法
作為最常用的資料結構之一,鍊錶被廣泛應用在各個方面,下至作業系統底層的驅動程式上至各種應用軟體,都處處可以看到鍊錶的身影,皆因其操作的簡便與應用的高效性。總結個人目前所學,鍊錶的建立方式主要有 以下幾種方法 方法一 struct link node struct link node list nul...