チェーンテーブルの重複ノードの削除-Java実装

3992 ワード

public class DeleteDuplication {
	/**
	 *           
	 *  1、       ,           。 
	 *	2、            ,        ,                  
	 *		          next.next      ,       null  ,
	 *			              pre             
	 *	3、       next     ,                
	 */
	public ListNode deleteDuplication(ListNode head) {
		if(head == null)
			return null;
		
		ListNode preNode = new ListNode(); //      
		ListNode tmpNode = preNode;
		preNode.next = head;
		ListNode curNode = head; //     
		
		while(curNode != null) {	
			//          ,      			 
			if(curNode.next != null && curNode.value == curNode.next.value) {
				while(curNode.next != null && curNode.value == curNode.next.value)
					curNode = curNode.next;
				preNode.next = curNode.next;  //          
			}
			else {
				preNode = curNode; // preNode     	
			}
			curNode = curNode.next;	
		}
		return tmpNode.next;
	}
}