(목록의 중복 노드 삭제) 주제 설명 :
A는 연결리스트 노드가 중복 분류에서 중복 된 노드 목록을 삭제, 노드가 반복 유지하지 않는, 헤드 포인터 목록을 반환합니다. 예를 들어, 목록 1-> 2-> 3-> 3-> 4 -> 4 -> 5 취급 1-> 2-> 5
아이디어를 문제가 해결 : 중복 된 노드를 여기에 바로 예약되지 않은 노드를 반복 제거 할 수 있기 때문에 해시 세트 방법을 사용하는 것이 첫 번째 판단의 반복은, 중복 요소 가야 해시 세트에 추가 다음 중복 요소를 삭제합니다.
사전 및 CUR 두 개의 포인터를 사용하여, 이전 노드와 현 노드를 표시.
/ * 공용 클래스 ListNode { INT 발; ListNode 다음 = NULL; ListNode (INT의 발) { this.val = 브로; } } * / 수입하고있는 java.util. *; 공용 클래스 솔루션 { 공공 ListNode deleteDuplication (ListNode pHead) { 경우 (pHead == NULL) { 는 null; } //先找出相同节点存入哈希세트中 HashSet에 <정수> = 새로운 세트 HashSet의 <> (); ListNode는 = pHead 미리; ListNode CUR = pHead.next; 반면 (! CUR = NULL) { 경우 (cur.val == pre.val) { set.add (cur.val); } CUR = 사전, CUR = cur.next; } 동일한 노드 삭제 // / ** (이 중복 노드의 경우 첫 번째 노드) * 첫 번째 노드를 삭제를 * / while 회 (PHEAD set.contains = 널 (null) && (pHead.val)! ) { PHEAD = pHead.next; } IF (PHEAD == NULL) { 는 null; } / ** * 삭제 중간 노드 * / 사전 = PHEAD; CUR = pHead.next; ! 그동안 (CUR = NULL) { IF (set.contains (Cur.Val)) { pre.next = cur.next; CUR = cur.next; } {를 다른 사전 = CUR; = cur.next 기여; } } 반환 애완 동물; } }
헤드 노드의 전면이 가능하기 때문에 결정된 헤드 노드, 반복 제거 할 필요가 있지만, 때 첫번째 특별한주의 노드는 비어 있어야 삭제 (1) 헤더의 일부를 삭제하면 비어 있고, 그렇지 않은 경우 후 빈 판사의 말 :
IF (set.contains (pHead.val)) { 애완 pHead.next는 =; }
경우가있을 수 있습니다, 감당할 수없는 삭제 헤드 노드를 반복합니다 :
필요가있다 그래서 :
반면 {(pHead = NULL && set.contains (pHead.val)!) pHead = pHead.next; } (pHead == NULL) {경우 는 null; }
(2) 사용 pre.next = cur.next 때 현재 반복 요소를 삭제할 수있다; 현재 소자 CUR에 기초하여, 세트 안에 반복 요소의 현재 세트가 필요를 제거 할 CUR 때문이다.