【leetcode707】设计链表
- 示例
MyLinkedList linkedList = new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2); //链表变为1-> 2-> 3
linkedList.get(1); //返回2
linkedList.deleteAtIndex(1); //现在链表是1-> 3
linkedList.get(1); //返回3
- 代码
class MyLinkedList {
public:
MyLinkedList() {
size = 0;
head = new LinkNode();
}
int get(int index) {
LinkNode* p = head->next;
if (index > size - 1 || index < 0 || index>1000) {//如果链表为空,或者index大于链表长度,则访问失败
return -1;
}
while (index--) {
p = p->next;
}
return p->val;
}
void addAtHead(int val) {
if (val < 0 || val>1000) {
return;
}
LinkNode* p = new LinkNode(val, head->next);
head->next = p;
size++;
}
void addAtTail(int val) {
if (val < 0 || val>1000) {
return;
}
LinkNode* p = new LinkNode(val);//链表结点
LinkNode* q = head;//遍历指针
while (q->next != nullptr) {
q = q->next;
}
q->next = p;
size++;
}
void addAtIndex(int index, int val) {
if (val < 0 || val>1000 || index > size) {
return;
}
LinkNode* p = new LinkNode(val);
LinkNode* cur = head;
while (index--) {
cur = cur->next;
}
size++;
p->next = cur->next;
cur->next = p;
}
void deleteAtIndex(int index) {
//根据位序删除元素
if (index < 0 || index >= size || index > 1000) {
return;
}
LinkNode* p = head;
while (index--) {
p = p->next;
}
p->next = p->next->next;
size--;
}
private:
//链表结构体
struct LinkNode {
int val;
LinkNode* next;
LinkNode() :val(0), next(nullptr) {}
LinkNode(int x) :val(x), next(nullptr) {}
LinkNode(int x, LinkNode* next) :val(x), next(next) {}
};
int size = 0;//链表大小
LinkNode* head;//虚拟头结点,统一操作,不区分是否头结点
};
- 执行结果一
biaotifuzhishihaobiaotifuzhishihao
biaotifuzhishihaobiaotifuzhishihao
- 执行结果二
biaotifuzhishihaobiaotifuzhishihao
biaotifuzhishihaobiaotifuzhishihao