제목 : 정렬 된 연결리스트 노드가 중복에 중복 노드 목록을 삭제, 노드가 반복 유지하지 않는, 헤드 포인터 목록을 반환합니다. 예를 들어,리스트 4-> 5 취급> 2-> 3-> 3-> 4 -> 1 1-> 2-> 5
A는 : 첫 번째 노드가 반복 순회 중에, 이전 노드에 대한 포인터가 있어야합니다
더 전달 함수 프로토 타입이 포인터에 오지와 헤드 노드는 삭제 될 수 있기 때문에, 그래서 새로운 노드 머리를 구축
부울 형 flag_repeat 중복 노드 여부, 노드는 반복되는 경우, 이동 노드는 포인터가 반복되지 않는 경우 삭제 결정
/ * 구조체 ListNode { INT 브로; 구조체 ListNode * 다음, ListNode (INT의 X) 발 (X), 다음 (NULL) { } } * / 급 솔루션 { 공개 : ListNode * deleteDuplication (ListNode * PHEAD) { IF ( (PHEAD == nullptr a) || (pHead-> 다음 == nullptr a)) { PHEAD를 반환; } 두 개의 포인터를 전달하지 않기 때문에 //, 제 1 노드는 또한 제거 될 수 있으므로, 노드는 새로운 헤드 구축 ListNode을 = 새로운 새 ListNode 헤드 * (0), 헤드 -> 다음 = PHEAD; ListNode 헤드 * = P 이전; ListNode * • pNode = PHEAD; (! • pNode = nullptr a) 그동안 { 부울 flag_repeat = 거짓; // 중복 노드가 있는지 판정한다 IF ((pNode-> 다음 = nullptr a) && (pNode-> 발 pNode- ==>하는 next-> 발)!) { flag_repeat = TRUE로; }
// 아니오 노드를 반복 IF (== flag_repeat false로) { ; P 이전 = • pNode • pNode = pNode-> 다음; }
// 노드가 중복 다른 { ListNode pDelete = * • pNode; // 보존되지 노드 중복 동안 ((pNode-> 다음을! A = nullptr) && (pNode-> 발 pNode- ==>하는 next-> 발)) { • pNode = pNode-> 다음; //은 원래 하나를 삭제 pDelete을 삭제; pDelete = pNode; } pPrev-> 다음 = pNode-> 다음; pNode = pNode-> 다음; //删第二个 pDelete을 삭제; pDelete = pNode; } } 머리 -> 다음 반환; } };
관련 항목 :
단일 쇄 반전 함수를 프로그래밍 : 단일 연결리스트의 반전을 달성하는 기능 목록 입력, 반전 목록 플립 후에리스트를 반환한다.
링크 된 목록에서 단일 노드를 식별, 꼬리 포인터에 노드까지의 거리가 K입니다 : 노드의 방법 연결 목록을 찾기 위해, 꼬리 포인터에 노드까지의 거리가 K.입니다 연결리스트의 0 끝에서 두 번째 노드 목록 꼬리 포인터. 소요 시간 복잡도는 O (n)이된다.
반대로 모든 K리스트 세트 : 체인은 주어진 노드 (k)의 각 세트는 대칭 및 반전 후에리스트를 반환한다. K보다 작거나리스트의 길이와 동일한 양의 정수이다. 전체 노드의 개수 (k)의 정수 배가되지 않으면, 노드는 원래 순서를 나머지 지속될 것이다.