leetcode Day3 链表

76 阅读1分钟

剑指 Offer 52. 两个链表的第一个公共节点

双指针,当两个链表有公共节点时,他们一定会同时指向其公共节点,他们走的路是一样的,都走了a+b+c;如果没有公共结点,会同时指向null,因为他们是同步变化的,他们走的路始终一样

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

剑指 Offer II 024. 反转链表

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

剑指 Offer II 027. 回文链表

先放到数组中,再利用双指针

var isPalindrome = function(head) {
    let node=head
    let arr=[]
    while(node){
        arr.push(node.val)
        node=node.next
    }
    let l=0,r=arr.length-1
    while(l<r){
        if(arr[l]!==arr[r]){
            return false
        }
        l++
        r--
    }
    return true
};

面试题 02.01. 移除重复节点

var removeDuplicateNodes = function(head) {
    if(head===null){return head}
    let node=head
    let cur=head.next
    let arr=[head.val]
    while(cur){
        if(arr.indexOf(cur.val)===-1){
            arr.push(cur.val)
            node=node.next
            cur=cur.next
        }
        else{
            node.next=cur.next
            cur=cur.next
        }
    }
    return head
};