删除链表中重复的节点


题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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