题解 | #删除链表中重复的结点#
删除链表中重复的结点
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
};