제목 설명
노드가 중복 정렬 된 링크 목록에서 중복 된 노드 목록을 삭제, 노드가 반복 유지하지 않는, 헤드 포인터 목록을 반환합니다. 예를 들어,리스트 4-> 5 취급> 2-> 3-> 3-> 4 -> 1 1-> 2-> 5
분석 :
이 아이디어 목록을 횡단하는 기록을 위해 두 가지 방법은 다음 중복 된 노드를 삭제
1 작성 : 비 재귀, 손가락 비스
1) 더미 헤드 노드 (P)를 추가, 취급 성
2) 다음에 마지막으로, 제 1 노드가 현재 가리 키도록 두 포인터는 처음과 마지막 이제 설정 및하는 노드의 서로 다른 값이 현재 노드 1 세대> 다음 = 마지막을 찾아 이동
/ * 구조체 ListNode { INT 발, 구조체 * 다음 ListNode, ListNode (INT의 X) : 발 (X), 다음 (NULL) { } } * / 클래스 솔루션 { 공개 : ListNode * deleteDuplication (ListNode * PHEAD) { // 가상 제 1 노드 (P)의 증가 * P = ListNode를 새로운 새 - (ListNode . 1 ) P -> 다음 = PHEAD; // 제 1 노드 점을 현재 노드의 현재 마지막 후진 다른 노드와 발견 값 제 * ListNode = P, ListNode는 * = 마지막 PHEAD, 그동안 (= 마지막 NULL && 마지막 -> 다음 =! NULL) { 경우 (! last-> = 브로 last->하는 next-> 발)을 { 제 = 마지막; 지난 = last-> 다음; } 다른 { INT (X) = last-> 발; 반면 (! last-> 다음 = NULL) { 경우 (last-> 브로 == X) { 마지막 = last-> 다음; } 다른 { 휴식 ; } } 경우 (last-> 브로 == X) 지난 = NULL; 첫째 -> 다음 = 마지막; } } 반환 P-> 다음; } };
같은 생각, 재귀 : 2 쓰기
* DeleteDuplication ListNode (ListNode * PHEAD) { IF (PHEAD == NULL || pHead-> 다음 == NULL) // 하나 개의 노드 또는 노드 0 복귀 PHEAD; IF (pHead-> 브로 == pHead- >하는 next-> 발) // 현재 노드 중복 노드이다 { ListNode의 * 온도 = pHead-> 다음으로, 그동안 ! (TEMP = NULL && temp-> 브로 pHead- ==> 발) //가 현재 노드와 동일한을 건너 모든 노드는, 제 1 전류 접합 노드 다른 찾을 TEMP = temp-를> 다음으로, 반환 deleteDuplication (TEMP)를; // 재귀 제 노드 다른 노드로부터 현재 시작 } 다른 // 현재 노드는 중복 노드가 아닌 { PHEAD-> 다음 = deleteDuplication (pHead- 다음>); //이 현재 노드를 유지, 재귀 다음 노드에서 시작 반환 ; PHEAD } }