链表----删除链表中重复的节点
删除链表中重复的节点:
方法一:采用递归的方法,但这种方法在链表无重复节点时效率不高
function deleteDuplication(pHead) { if(pHead==null||pHead.next==null){//判断没有节点或只有一个节点的情况 return pHead } if(pHead.val==pHead.next.val){//如果两个节点重复时 let node=pHead.next while(node!=null&&node.val==pHead.val){//找到所有重复的节点 node=node.next } return deleteDuplication(node)//采用递归的方法从下一个不重复的点开始 }else{ pHead.next= deleteDuplication(pHead.next)//保留当前节点,从下一个节点继续 return pHead } }
方法二:
- 添加一个头节点,以方便碰到第一个第二个节点就相同的情况
- 设置pre,cur指针,pre指针指向当前确定不重复的那个节点,而cur指针一直往后搜索。
function deleteDuplication(pHead) { if (pHead === null || pHead.next === null) { return pHead; } const Head = new ListNode(0); // 重要,方便处理第一个、第二个节点就是相同的情况。 Head.next = pHead; let pre = Head; let cur = Head.next; while (cur !== null) { if (cur.next !== null && cur.val === cur.next.val) { // 找到最后的一个相同节点,因为相同节点可能重复多个 while (cur.next !== null && cur.val === cur.next.val) { cur = cur.next; } pre.next = cur.next; cur = cur.next; } else { pre = pre.next; cur = cur.next; } } return Head.next; }