代码随想录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

};
posted @ 2023-03-18 11:03  herbert_118  阅读(27)  评论(0)    收藏  举报