leecode Day40 剑指专项

94 阅读1分钟

1021. 删除最外层的括号

var removeOuterParentheses = function(s) {
    let stack=[]
    let res=''
    for(let i of s){
        if(i==='('){
            if(stack.length===0){
                stack.push(i)
            }else{
                res+=i
                stack.push(i)
            }
        }else{
            stack.pop()
            if(stack.length!==0){
                res+=i
            }
        }
    }
    return res
};

剑指 Offer II 023. 两个链表的第一个重合节点

var getIntersectionNode = function(headA, headB) {
    if(headA===null || headB===null){
        return null
    }
    let pA=headA,pB=headB
    while(pA!==pB){
        pA=pA===null?headB:pA.next
        pB=pB===null?headA:pB.next
    }
    return pA
};

剑指 Offer II 024. 反转链表

var reverseList = function(head) {
    let pre=null,cur=null,node=head
    while(node){
        cur=node.next
        node.next=pre
        pre=node
        node=cur
    }
    return pre
};

剑指 Offer II 025. 链表中的两数相加

var addTwoNumbers = function(l1, l2) {
    let list1=reverseList(l1)
    let list2=reverseList(l2)
    let flag=0
    let dummyHead=new ListNode(0)
    let pre=dummyHead
    while(list1 || list2 || flag>0){
        let x=list1===null?0:list1.val
        let y=list2===null?0:list2.val
        pre.next=new ListNode((x+y+flag)%10)
        pre=pre.next
        flag=Math.floor((x+y+flag)/10)
        list1=list1===null?null:list1.next
        list2=list2===null?null:list2.next
    }
    return reverseList(dummyHead.next)
};
const reverseList=(list)=>{
    let pre=null,cur=null,node=list
    while(node){
        cur=node.next
        node.next=pre
        pre=node
        node=cur
    }
    return pre
}

剑指 Offer II 026. 重排链表

var reorderList = function(head) {
    if(head.next==null || head.next.next==null) return head;
    let fast=head,slow=head
    while(fast.next){
        fast=fast.next
        slow=slow.next
        if(fast.next){
            fast=fast.next
        }
    }
    let cur=slow.next
    slow.next=null
    let add=reverseList(cur)
    let current=head
     while(current.next && add!=null) { 
        let cNext = current.next;
        let preNext = add.next;
        current.next = add;
        current.next.next = cNext;
        add = preNext;
        current = cNext;
    }
    return head
};
const reverseList=(list)=>{
    let pre=null,curr=null,node=list
    while(node){
        curr=node.next
        node.next=pre
        pre=node
        node=curr
    }
    return pre
}