【力扣练习题】删除排序链表中的重复元素II


public class deleteDuplicates {
	/*给定一个已排序的链表的头 head , 删除所有重复的元素,
        使每个元素只出现一次 。返回 已排序的链表 。*/
	public static void main(String[] args) {
		ListNode n1=new ListNode(3);
		ListNode n2=new ListNode(3,n1);
		ListNode n3=new ListNode(2,n2);
		ListNode n4=new ListNode(1,n3);
		ListNode n5=new ListNode(1,n4);
		
		ListNode n6=new ListNode(1);
		ListNode res=deleteDuplicates(n6);
		print(res);
		
	}
	public static ListNode deleteDuplicates(ListNode head) {//头结点
		//[1,1,2,3,3]
		//从头开始遍历
		//下一个结点值等于当前结点,则删除下一节点
		//考虑[]情况
		if(head==null)
			return null;
		//考虑[1]
		if(head.next==null)
			return head;
		if(head.next.val == head.val) {//重复结点
			head.next=head.next.next;//让当前节点的next指向下一节点的next结点
			//递归调用
			deleteDuplicates(head);//当前结点和下下一个节点比较
		}else {//不是重复结点
			//递归调用
			deleteDuplicates(head.next);//下一个结点递归继续判断
			
		}
		
		return head;
    }
	public static void print(ListNode node) {
		if(node!=null) {
			System.out.println(node.val);
			print(node.next);
		}else {
			System.out.println();
			
		}
						
	}

	
}
class ListNode {
	int val;
    ListNode next;
	ListNode() {
		
	}
	ListNode(int val) { 
		this.val = val;
		}
	ListNode(int val, ListNode next) {
		this.val = val; this.next = next;
		}
}

你可能感兴趣的:(算法)