本文共 1393 字,大约阅读时间需要 4 分钟。
链表是一种用来存储一系列数据的数据结构,支持高效的增删之类操作。为了实现链表,可以选择单链表或者双链表。这里以单链表为例,每个节点需要包含两个属性:val(节点值)和next(指向下一个节点的指针,初始为空)。
链表类MyLinkedList实现了以下功能:
struct ListNode {int val;ListNode* next;ListNode(int value) : val(value), next(nullptr) {}};
MyLinkedList() {_dummyHead = new ListNode(0);_size = 0;}
int get(int index) {int count = 0;ListNode* pNode = _dummyHead;while (pNode->next) {if (count == index) {return pNode->next->val;}pNode = pNode->next;++count;}return -1;}
void addAtHead(int val) {ListNode* newHead = new ListNode(val);_dummyHead->next = newHead;newHead->next = _dummyHead->next;_size++;}
void addAtTail(int val) {ListNode* newTail = new ListNode(val);ListNode* pNode = _dummyHead;while (pNode->next) {pNode = pNode->next;}pNode->next = newTail;_size++;}
void addAtIndex(int index, int val) {if (index < 0) {addAtHead(val);return;}if (_size >= index) {insertBefore(index, val);} else {addAtTail(val);}}
void deleteAtIndex(int index) {if (index < 0 || index >= _size) {return;}ListNode* pNode = _dummyHead;for (int i = 0; i < index; ++i) {pNode = pNode->next;}if (pNode->next) {ListNode* nextNode = pNode->next;pNode->next = nextNode->next;delete nextNode;_size--;}}
转载地址:http://nhpsz.baihongyu.com/