單連結串列的常見操作:
- 連結串列的定義
- 連結串列的初始化
- 連結串列的建立
- 測表長
- 連結串列插入
- 連結串列刪除
- 列印連結串列
- 反轉連結串列
// 連結串列的定義 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; }