数据结构之链表篇(单链表的常见操作)
Posted tangcumalaxia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之链表篇(单链表的常见操作)相关的知识,希望对你有一定的参考价值。
单链表的常见操作:
- 链表的定义
- 链表的初始化
- 链表的创建
- 测表长
- 链表插入
- 链表删除
- 打印链表
- 反转链表
// 链表的定义 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("输入的位置不合法,无法删除! "); 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 "); } } // 反转链表 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; }
以上是关于数据结构之链表篇(单链表的常见操作)的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题笔记之链表篇剑指 Offer 18. 删除链表的节点