C++LeetCode 구현(83.질서 있 는 링크 의 중복 항목 제거)

[LeetCode]83.Remove Duplicates from Sorted List 질서 있 는 링크 의 중복 항목 제거
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2
Output: 1->2
Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
이 문 제 는 주어진 질서 있 는 링크 의 중복 항목 을 제거 합 니 다.그러면 이 링크 를 옮 겨 다 닐 수 있 습 니 다.각 노드 는 그 뒤의 노드 와 비교 할 수 있 습 니 다.만약 에 노드 값 이 같 으 면 앞 에 있 는 next 지침 을 붙 어 있 는 같은 값 의 노드 를 뛰 어 넘 고 뒤의 노드 를 가리 키 면 됩 니 다.이렇게 옮 겨 다 니 면 모든 중복 되 는 노드 가 건 너 갑 니 다.남 겨 진 링크 는 중복 항목 이 없습니다.코드 는 다음 과 같 습 니 다.
해법 1:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode *cur = head;
        while (cur && cur->next) {
            if (cur->val == cur->next->val) {
                cur->next = cur->next->next;
            } else {
                cur = cur->next;
            }
        }
        return head;
    }
};
우 리 는 또한 재 귀적 인 방법 으로 할 수 있다.먼저 적어도 두 개의 결점 이 있 는 지 판단 하고 그렇지 않 으 면 직접 head 로 돌아 갈 수 있다.그렇지 않 으 면 헤드->next 에 귀속 함 수 를 호출 하고 헤드->next 에 값 을 부여 합 니 다.여 기 는 어 지 러 울 수 있 습 니 다.먼저 뒤의 문장 을 보고 돌아 갈 때 헤드 결점 은 먼저 뒤의 결점 과 비교 합 니 다.만약 에 값 이 같 으 면 뒤의 결점 으로 돌아 갑 니 다.현재 헤드 결점 은 건 너 뛰 고 다 르 면 헤드 결점 으로 돌아 갑 니 다.실질 적 인 삭제 작업 을 하 는 것 이 마지막 문장 에서 진행 되 었 음 을 발견 할 수 있 습 니 다.두 번 째 문장 을 살 펴 보고 head 뒤의 결점 에 재 귀 함 수 를 호출 하면 suppose 가 되 돌아 온 링크 는 중복 항목 이 없습니다.이때 head 결점 을 받 은 후에 세 번 째 문장 에서 head 가 또 duplicate 가 있 는 지 확인 하 십시오.실제로 재 귀 는 끝 점 까지 갔다 가 계속 거 슬러 올 라 와 중복 점 을 삭제 하고 코드 는 다음 과 같다.
해법 2:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if (!head || !head->next) return head;
        head->next = deleteDuplicates(head->next);
        return (head->val == head->next->val) ? head->next : head;
    }
};
C++구현 LeetCode(83.질서 있 는 링크 의 중복 항목 제거)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++는 질서 있 는 링크 의 중복 항목 을 제거 하 는 것 을 실현 합 니 다.우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기