標籤:rev || 反轉 new list() font tle printf list
單鏈表的常見操作:
- 鏈表的定義
- 鏈表的初始化
- 鏈表的建立
- 測表長
- 鏈表插入
- 鏈表刪除
- 列印鏈表
- 反轉鏈表
// 鏈表的定義struct linkList { int value; linkList *next;};// 鏈表的初始化void initList(linkList *L){ L = nullptr;}// 鏈表的建立(頭插入法)linkList* createList(){ linkList * head = new linkList; head->next = nullptr; if (head == nullptr) { std::cout << "分配記憶體失敗!" << std::endl; return nullptr; } int input; std::cout << "輸入鏈表值:" << std::endl; while (cin >> input && input != -1) { linkList *tmp = new linkList; tmp->value = input; tmp->next = head->next; head->next = tmp; tmp = nullptr; } return head;}// 測表長int listLen(linkList *L){ int length = 0; while (L != nullptr) { length++; L = L->next; } //std::cout << "表長為:" << length - 1 << std::endl; return length-1;}// 鏈表插入void insertList(linkList *L, int pos, int value){ int index = 1; linkList *p = L; linkList *tmp = new linkList; tmp->value = value; if (pos <= 0 || pos > listLen(L) + 1) { printf("輸入的位置不合法,無法插入!"); return; } else if (pos == listLen(L) + 1) { while (p->next != NULL) { p = p->next; } tmp->next = nullptr; p->next = tmp; return; } else { while (index < pos) { index++; p = p->next; } tmp->next = p->next; p->next = tmp; }}// 鏈表刪除void deleteList(linkList *L, int pos){ int index = 1; if (pos <= 0 || pos > listLen(L)) { printf("輸入的位置不合法,無法刪除!\n"); return; } else { while (index < pos) { index++; L = L->next; } L->next = L->next->next; }}// 列印鏈表void print(linkList *L){ if (L->next == nullptr) { printf("鏈表中無元素!"); return; } else { linkList *tmp = new linkList; tmp = L->next; while (tmp != NULL) { printf("%d->", tmp->value); tmp = tmp->next; } printf("NULL\n"); }}// 反轉鏈表linkList* reverseList(linkList *L){ if (L == nullptr) return nullptr; linkList *rev = new linkList; rev->next = nullptr; while (L->next != nullptr) { L = L->next; linkList *tmp = new linkList; tmp->value = L->value; tmp->next = rev->next; rev->next = tmp; tmp = nullptr; } return rev;}int main(int argc,int* argv[]){ linkList *L = new linkList; initList(L); L = createList(); print(L); insertList(L, 4, 10); print(L); deleteList(L, 5); print(L); linkList *rev = new linkList; rev->next = nullptr; rev = reverseList(L); print(rev); while (true) { getchar(); } return 0;}
資料結構之鏈表篇(單鏈表的常見操作)