刪除鏈表中重復的節點


題目:在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理后為 1->2->5

分析:

  • 如果鏈表為空,或者只有一個結點,直接返回

  • 如果鏈表結點大於等於2,則比較當前結點和下一個結點是否相同,如果相同,則刪除當前結點和下一個結點,比較下下個結點是否和當前結點相同,如果相同繼續刪除,直至與當前結點不同。

  • 返回鏈表表頭是第一個不重復結點,需要一個前驅結點prenode記錄不重復鏈表,其next應該初始為NULL,如果有下一個不重復結點,則next是下一個不重復結點。

 

 1 public class Solution {
 2     public ListNode deleteDuplication(ListNode pHead)
 3     {
 4        if(pHead==null){
 5            return null;
 6        }
 7         
 8         ListNode root=new ListNode(0);
 9         root.next=pHead;
10         ListNode preNode=root;
11         ListNode curNode=pHead;
12         while(curNode!=null){
13             if(curNode.next!=null&&curNode.val==curNode.next.val){
14                 while(curNode.next!=null&&curNode.val==curNode.next.val){
15                     curNode=curNode.next;
16                 }
17                 preNode.next=curNode.next;
18             }else{
19                 preNode=curNode;
20             }
21             curNode=curNode.next;
22         }
23         return root.next;
24     }
25 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM