[LintCode] 링크 의 요 소 를 삭제 합 니 다.

1648 단어
원문 은 제 블 로그 에 발표 되 었 습 니 다. 링크 에 있 는 요 소 를 삭제 하고 관심 을 구하 고 의사 소통 을 하 며 의견 을 구하 고 건 의 를 구 합 니 다.
문제.
LintCode: 링크 의 요 소 를 삭제 합 니 다.
묘사 하 다.
링크 에서 주어진 값 val 과 같은 모든 노드 를 삭제 합 니 다.
본보기
링크 1->2->3->3->4->5->3 와 val = 3 을 드 립 니 다. 삭제 3 후의 링크 를 되 돌려 야 합 니 다. 1->2->4->5링크 의 데이터 구조
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

실현 - C + +
class Solution {
public:
    ListNode *removeElements(ListNode *head, int val) {
        // 21ms
        ListNode *prev = NULL;
        ListNode *p = head;
        ListNode *buffer;
        while (p != NULL) {
            if (p->val == val) {
                if (prev != NULL)
                    prev->next = p->next;
                else
                    head = p->next;
                buffer = p;
                p = p->next;
                delete buffer;
            } else {
                prev = p;
                p = p->next;
            }
        }
        return head;
    }
};

총결산
간단 한 문 제 는 너무 많은 분석 이 필요 없 이 몇 가지 세부 사항 을 주의 하면 된다.
  • 되 돌아 올 때 머리 바늘 을 되 돌려 야 하기 때문에 다른 바늘 로 옮 겨 다 녀 야 합 니 다.
  • 노드 를 삭제 하 는 것 은 건 너 뛰 기만 할 수 없고 반드시 delete 으로 메모 리 를 방출 해 야 한다.
  • 헤드 노드 를 삭제 할 때 헤드 포인터 가 바 뀌 고 반환 값 은 반드시 새로운 헤드 포인터 로 바 꿔 야 합 니 다.
  • 끝 노드 를 삭제 할 때 앞의 노드 nextNULL 로 설정 해 야 한다.꼬리 노드 delete 만 병 치 NULL 하면 앞의 노드 next 는 하나 가 된다.
  • 좋은 웹페이지 즐겨찾기