题解 | #删除链表中重复的结点#

删除链表中重复的结点

http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

根据法2的原理 有些重复的地方还有待优化 
/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function deleteDuplication(pHead)
{
    // write code here
    let table = {};
    let p = pHead;
    let pre={};
    while(p){
        if(table[p.val]){
//             console.log("重复")
            if(table[p.val].tpre!== true){
//                 console.log("首次重复 删除旧节点")
                if(pre===table[p.val].tp){
                    //出现连续相等情况 12 33 中的 33
                    if(pre===pHead){
                        while(p.next && p.val === p.next.val){
                            p=p.next;
                        }
                        pHead = p.next  ;
                        p=p.next;
                        continue;
                    }
                    while(p.next && p.val === p.next.val){
                        p=p.next;
                    }
                    table[p.val].tpre.next=p.next;
                    pre = table[p.val].tpre;
                    p=p.next;
                    continue;
                }
                table[p.val].tpre.next= table[p.val].tp.next;
                table[p.val].tpre=true;
            }
            if(table[p.val].p===pHead){
                pHead = pHead.next;
                p=p.next;
                continue;
            }
//             console.log("删除当前节点")
            pre.next = p.next;
        }else{
            table[p.val] = {tpre:pre,tp:p}
            pre=p;
        }
        p=p.next;
    }
    return pHead;
}
module.exports = {
    deleteDuplication : deleteDuplication
};
全部评论

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务