【java】82. 删除排序链表中的重复元素 II---时间复杂度O(N),踩坑的一天天!!!

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

示例 1:
在这里插入图片描述

输入:head = [1,1,1,2,3]
输出:[2,3]

提示:

链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列

代码:
public ListNode deleteDuplicates(ListNode head) {
    
    
    	 ListNode p=head,pfist=head;
    	 int i=1;
    	 if(head==null||head.next==null) {
    
    
    		 return head;
    	 }
	     while(p!=null&&p.next!=null) {
    
    
	    	 if (p.val==p.next.val) {
    
    
				int a=p.val;
				while(p!=null) {
    
    
					if(p.val==a) {
    
    
						p=p.next;
					}else{
    
    
                        break;
                    }
				}
				if(i==1) {
    
    
					pfist=head=p;
				}
			 }else {
    
    
				if(i==1) {
    
    
					pfist=head=p;
                    i=2;
				}else{
    
    
                   pfist.next=p;
                   pfist=p;
                }
				p=p.next;
                pfist.next=null;
			 }
	     }
	     if(p!=null) {
    
    
             if(i==1){
    
    
                 return p;
             }
	    	 pfist.next=p;
	     }
    	  return head; 
      }

猜你喜欢

转载自blog.csdn.net/qq_44461217/article/details/115204922