중복 노드를 삭제 목록의 안전성을 증명하기 위해 [제공]

제목 : 정렬 된 연결리스트 노드가 중복에 중복 노드 목록을 삭제, 노드가 반복 유지하지 않는, 헤드 포인터 목록을 반환합니다. 예를 들어,리스트 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)의 정수 배가되지 않으면, 노드는 원래 순서를 나머지 지속될 것이다.

  

 

추천

출처www.cnblogs.com/xiexinbei0318/p/11419901.html