好兄弟的递归方法还没完全理解,边遍历边删除的方法还是依靠双指针,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
};