删除链表中重复的节点

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

 

posted @ 2019-05-04 21:51  JingMo  阅读(1955)  评论(0)    收藏  举报