您现在的位置是:首页 >其他 >leetcode 707. Design Linked List设计链表网站首页其他
leetcode 707. Design Linked List设计链表
简介leetcode 707. Design Linked List设计链表
这道题虽然是基础的数据结构实现,但体现了:
- 面向对象的基本原则(封装、构造函数设计)
- 指针操作的准确性
- 边界条件的完整处理
Node的设计:
关键点:
1. 使用 struct 而不是 class,因为链表节点主要是承载数据,不需要封装。
2. 提供两个构造函数,方便节点创建
3. 使用初始化列表,良好的 C++ 编程习惯
struct Node {
int val;
Node* next;
Node() : val(0), next(nullptr) {};
Node(int i, Node* ptr) : val(i), next(ptr) {};
};
MyLinkedList :
class MyLinkedList {
private:
Node* head;
public:
MyLinkedList():head(nullptr) {};
MyLinkedList(Node* n): head(n) {};
int get(int index) {
if (index < 0) return -1;
Node* pre = head;
while (index > 0 && pre) {
index--;
pre = pre->next;
}
if (pre == nullptr) return -1;
return pre->val;
}
void addAtHead(int val) {
Node* newHead = new Node(val,head);
head = newHead;
}
void addAtTail(int val) {
Node* newNode = new Node(val,nullptr);
if (!head) {
head = newNode;
return;
}
Node* cur = head;
while (cur->next) {
cur = cur->next;
}
cur->next = newNode;
}
void addAtIndex(int index, int val) {
if (index == 0) {
addAtHead(val);
return;
}
if (index < 0) return;
Node* curr = head;
while (index > 1 && curr) {
index--;
curr = curr->next;
}
if (!curr) return;
Node* newNode = new Node(val,curr->next);
curr->next = newNode;
}
void deleteAtIndex(int index) {
if (!head) return;
if (index == 0) {
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* curr = head;
while (index > 1 && curr) {
index--;
curr = curr->next;
}
if (!curr || !curr->next) return;
Node* temp = curr->next;
curr->next = temp->next;
delete temp;
}
};
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。