题目
设计实现链表:获取、头插法、尾插法、插入、删除
- get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。
- deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
提示:
所有值都在 [1, 1000] 之内。
操作次数将在 [1, 1000] 之内。
请不要使用内置的 LinkedList 库。
JS实现
var LinkedList = function(val){
this.val = val;
this.next = null;
}
var MyLinkedList = function() {
this.head = new LinkedList('head');
};
MyLinkedList.prototype.get = function(index) {
var current = this.head;
for(var i = 0;i<index;i++){
current = current.next;
}
return current.val;
};
MyLinkedList.prototype.addAtHead = function(val) {
var newNode = new LinkedList(val);
var current = this.head;
if(!current){
this.head = newNode;
}else{
newNode.next = current;
this.head = newNode;
}
};
MyLinkedList.prototype.addAtTail = function(val) {
var newNode = new LinkedList(val);
var current = this.head;
if(!current){
this.head = newNode;
}else{
while(current.next){
current = current.next;
}
current.next = newNode;
}
};
MyLinkedList.prototype.addAtIndex = function(index, val) {
var newNode = new LinkedList(val);
current = this.head;
for(var j = 0;j<index;j++){
current = current.next;
}
newNode.next = current.next;
current.next = newNode;
}
MyLinkedList.prototype.deleteAtIndex = function(index) {
current = this.head;
var node;
if(index == 1){
head = current.next;
}
else{
for(var k = 0;k<index;j++){
current = current.next;
}
node = current;
current = current.next;
node.next = current.next;
}
};
var 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