代码随想录算法训练营第三天 | 203.移除链表元素、707.设计链表、206.反转链表

203. 移除链表元素

tag: #链表
leetcode 地址:203. 移除链表元素

代码:

function removeElements(head: ListNode | null, val: number): ListNode | null {
    const newHead = new ListNode()
    newHead.next = head
    let tem = newHead

    while(tem && tem.next) {
        if(tem.next.val === val) {
            tem.next = tem.next.next
        }else {
            tem = tem.next
        }
    }

    return newHead.next
};

思路解析:

  • 用一个新的节点作为头部即可

707. 设计链表

tag: #链表
leetcode 地址:707. 设计链表

代码:

class MyLinkedList {
    vHead: ListNode = new ListNode()
    constructor() {
        const node = new ListNode()
        this.vHead = node
    }

    get(index: number): number {
        let temHead = this.vHead.next
        while(index-- && temHead) {
            temHead = temHead.next
        }
        if(temHead) {
            return temHead.val
        }
        return -1
        
    }

    addAtHead(val: number): void {
        const newHead = new ListNode(val)
        newHead.next = this.vHead.next
        this.vHead.next = newHead

    }

    addAtTail(val: number): void {
        let temHead = this.vHead
        while(temHead.next){
            temHead = temHead.next
        }
        temHead.next = new ListNode(val)
    }

    addAtIndex(index: number, val: number): void {
        let temHead = this.vHead
        while(index-- && temHead.next) {
            temHead = temHead.next
        }
        if(index>=0) return
        const newNode = new ListNode(val)
        if(temHead && temHead.next) {
            newNode.next = temHead.next
        }
        temHead.next = newNode
    }

    deleteAtIndex(index: number): void {
        let temHead = this.vHead
        while(index-- && temHead.next) {
            temHead = temHead.next
        }
        if(temHead && temHead.next) temHead.next = temHead.next.next
    }
}

/**
 * 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)
 */

思路解析:

  • 设置虚拟头部节点

206. 反转链表

tag: #链表 #反转
leetcode 地址:206. 反转链表

代码:

function reverseList(head: ListNode | null): ListNode | null {
    let cur = head
    let prev = null
    while(cur) {
        const next = cur.next
        cur.next = prev
        prev = cur
        cur = next
    }
    return prev
};
// 递归
function reverseList(head: ListNode | null): ListNode | null {
    function recur(preNode: ListNode | null, curNode: ListNode | null): ListNode | null {
        if (curNode === null) return preNode;
        let next: ListNode | null = curNode.next;
        curNode.next = preNode;
        preNode = curNode;
        curNode = next;
        return recur(preNode, curNode);
    }
    return recur(null, head);
};
posted @ 2022-12-09 21:05  牡蛎枯枯  阅读(16)  评论(0)    收藏  举报