好兄弟的递归方法还没完全理解,边遍历边删除的方法还是依靠双指针,pre指向pHead,cur = pHead,先判断当前节点值和下一节点值是否相等,

  • 如果相等就cur后移,循环比较,找到最后一个相等的节点,然后cur后移,并改变pre指向;
  • 如果不相等,则pre和cur同时向后移
function ListNode(x){
    this.val = x;
    this.next = null;
}
// function deleteDuplication(pHead)
// {
//     // write code here
//     let p=pHead
//     if(!pHead){
//         return null
//     }
//     let vaild=0
//     //如果开头遇见重复
//     while(p.next&&p.val==p.next.val){
//         p=p.next
//         vaild=1//置位标志位
//     }
//     //标志位被1,寻找符合的节点
//     if(vaild==1){
//        return deleteDuplication(p.next)
//     }
//     //未被置,则p可用,寻找下一个可用节点
//     if(vaild==0){
//         p.next=deleteDuplication(p.next)
//     }
//     //返回可用节点
//     return p
// }
function deleteDuplication (pHead) {
    let pHead1 = new ListNode(0);
    pHead1.next = pHead;
    let pre = pHead1;
    let cur = pHead;
    while (cur) {
        if (cur.next && cur.val == cur.next.val) {
            cur = cur.next;
            while (cur.next && cur.val == cur.next.val) {
               cur = cur.next;
            }
            cur = cur.next;
            pre.next = cur;
        } else {
            pre = cur;
            cur = cur.next;
        }
        
        
    }
    return pHead1.next
}
module.exports = {
    deleteDuplication : deleteDuplication
};