剑指offer--删除链表中重复的结点

来源:互联网 发布:魔兽1.12数据库 声望 编辑:程序博客网 时间:2024/06/05 10:01

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
[java] view plain copy
  1. /* 
  2.  public class ListNode { 
  3.     int val; 
  4.     ListNode next = null; 
  5.  
  6.     ListNode(int val) { 
  7.         this.val = val; 
  8.     } 
  9. } 
  10. */  
  11. public class Solution {  
  12.     ListNode deleteDuplication(ListNode pHead)  
  13.     {  
  14.         if(pHead==nullreturn null;  
  15.         ListNode p = pHead;  
  16.         ListNode n = new ListNode(0);  
  17.         ListNode pre = n;     
  18.         n.next = pHead;  
  19.         boolean flag = false;         
  20.         while(p!=null){  
  21.             ListNode q = p.next;  
  22.             if(q==nullbreak;  
  23.             if(q.val==p.val){  
  24.                 while(q!=null && q.val==p.val){  
  25.                     q = q.next;  
  26.                 }  
  27.                 pre.next = q;  
  28.                 p =q;  
  29.             }else{  
  30.                 if(!flag){  
  31.                     n.next = p;  
  32.                     flag = true;  
  33.                 }                 
  34.                 pre = p;  
  35.                 p = q;  
  36.             }  
  37.         }  
  38.         return n.next;  
  39.     }  
  40. }  


原文链接  http://blog.csdn.net/crazy__chen/article/details/45101011