洗掉鏈表中重復的節點:
方法一:采用遞回的方法,但這種方法在鏈表無重復節點時效率不高
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; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/2133.html
標籤:其他
上一篇:html/http/瀏覽器(二)
下一篇:css(一)
