代码随想录Day3-Leetcode203.移除链表元素,707.设计链表,206.反转链表
203.移除链表元素
很基础的链表题,没什么好说的,用虚拟头结点,和前置指针就解决了
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
let vHead = new ListNode(-1,head)
let p = vHead.next, pre = vHead
while(p!=null){
if(p.val == val){
pre.next = p.next
}else{
pre = pre.next
}
p = p.next
}
return vHead.next
};
707设计链表
这题出于时间问题, 写了屎山...先不管了
var MyLinkedList = function() {
this.vHead = {val:"-1",next:null}
this.tail = null
this.len = 0
};
/**
* @param {number} index
* @return {number}
*/
MyLinkedList.prototype.get = function(index) {
if(index>=this.len){
return -1
}
let p = this.vHead;
for(let i =0; i<=index; i++){
p = p.next
if(p==null){
return -1
}
}
return p.val
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtHead = function(val) {
if(this.vHead.next == null){
this.vHead.next = {val,next:null}
this.tail = this.vHead.next
}else{
let newHead = {val,next:this.vHead.next}
this.vHead.next = newHead
}
this.len++
//this.print()
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtTail = function(val) {
if(this.tail == null){
this.vHead.next = {val,next:null}
this.tail = this.vHead.next
this.len++
//this.print()
return
}
// else{
// this.tail.next = {val,next:null}
// this.tail = this.tail.next
// }
let p = this.vHead
while(p.next!=null){
p = p.next
}
p.next = {val,next:null}
this.len++
//this.print()
};
/**
* @param {number} index
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtIndex = function(index, val) {
if(this.index>this.len){
return
}
if(this.index == this.len){
this.addAtTail(val)
return
}
let p = this.vHead;
for(let i =0; i<index; i++){
p = p.next
if(p==null){
return
}
}
let newNode = {val,next:p.next}
p.next = newNode
//this.print()
this.len++
return
};
/**
* @param {number} index
* @return {void}
*/
MyLinkedList.prototype.deleteAtIndex = function(index) {
if(this.index>=this.len){
return
}
let p = this.vHead;
for(let i =0; i<index; i++){
p = p.next
if(p.next==null){
return
}
}
this.len--
p.next = p.next.next
//this.print()
return
};
MyLinkedList.prototype.print = function(){
let p = this.vHead
let str = ""
while(p!=null){
str+=" "+p.val
p=p.next
}
console.log(str)
}
// 6->1->2->0->4
/**
* 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)
-1 7
-1 2 7
-1 1 2 7
-1 1 2 7 0
-1 1 2 0
-1 6 1 2 0
-1 6 1 2 0
-1 4 6 1 2 0...
*/
206 反转链表
很简单的题, 一开始还成环了...
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
if(head==null||head.next == null){
return head
}
let pre = head
let p = head.next
head.next = null
let nTmp
while(p!=null){
nTmp = p.next
p.next = pre
pre = p
p = nTmp
}
return pre
};

浙公网安备 33010602011771号