/*
* @lc app=leetcode.cn id=707 lang=javascript
*
* [707] 设计链表
*/
// @lc code=start
var MyLinkedList = function () {
this.head = new ListNode();
this.size = 0;
};
/**
* @param {number} index
* @return {number}
*/
MyLinkedList.prototype.get = function (index) {
if (index < 0 || index >= this.size) return -1;
let cur = this.head;
for (let i = 0; i <= index; i++) {
cur = cur.next;
}
return cur.val;
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtHead = function (val) {
this.addAtIndex(0, val);
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtTail = function (val) {
this.addAtIndex(this.size, val);
};
/**
* @param {number} index
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtIndex = function (index, val) {
if (index > this.size) return;
index = Math.max(0, index);
this.size++;
let pre = this.head;
for (let i = 0; i < index; i++) {
pre = pre.next;
}
const addedNode = new ListNode(val)
addedNode.next = pre.next;
pre.next = addedNode;
};
/**
* @param {number} index
* @return {void}
*/
MyLinkedList.prototype.deleteAtIndex = function (index) {
if (index < 0 || index >= this.size) return;
let pre = this.head;
for (let i = 0; i < index; i++) {
pre = pre.next;
}
pre.next = pre.next.next;
this.size--;
};
/**
* Your MyLinkedList object will be instantiated and called as such:
* var obj = new MyLinkedList()
* var param_1 = obj.get(index)
* obj.addAtHead(val)
* obj.addAtTail(val)
* obj.addAtIndex(index,val)
* obj.deleteAtIndex(index)
*/
// @lc code=end
function ListNode(val, next) {
this.val = val || undefined;
this.next = next || null;
}