링크 노드 의 증가 와 삭제

링크 는 동적 데이터 구조 로 링크 를 만 들 때 링크 의 길 이 를 알 필요 가 없고 포인터 만 조작 해 야 하기 때문이다.
1. 링크 정의
struct ListNode{
	int val;
	ListNode* next;
	ListNode(int x) : val(x), next(NULL){}

};

2. 링크 끝 에 노드 추가
해결 방향: 원래 의 링크 는 빈 링크 와 비 공 링크 의 상황 으로 나 뉜 다.
특히 주의: 함수 의 첫 번 째 매개 변수 head 는 지침 을 가리 키 는 지침 입 니 다. 빈 링크 에 노드 를 삽입 할 때 새로 삽 입 된 노드 는 링크 의 헤드 지침 입 니 다. 이때 헤드 지침 을 바 꿀 수 있 기 때문에 head 매개 변 수 를 지침 의 지침 으로 설정 해 야 합 니 다. 그렇지 않 으 면 이 함수 head 는 여전히 빈 지침 입 니 다.
//            
void AddtoListNodeTail(ListNode** head, int value){
	ListNode* newNode = new ListNode(value);
	if (*head == NULL){
		*head = newNode;
	}
	else{
		ListNode* pNode = *head;
		while (pNode->next != NULL)
			pNode = pNode->next;
		pNode->next = newNode;
	}
}

3. 링크 에서 지정 한 값 을 가 진 첫 번 째 노드 를 찾 아 이 노드 를 삭제 합 니 다.
해결 방향: 두 가지 상황 으로 나 뉜 다.
  1) 삭제 할 값 은 두 노드 에 있 음
  2) 삭제 할 값 이 끝 점 에 없 음
//                   
void RemoveFirstValue(ListNode **head, int value){
	if (head == NULL || *head == NULL) return;
	ListNode* RemoveNode = NULL;

	//        
	if ((*head)->val == value){
		RemoveNode = *head;
		*head = (*head)->next;
	}
	//         
	else{
		ListNode *node = *head;
		while (node->next != NULL && node->next->val != value){
			node = node->next;
		}
		if (node->next != NULL && node->next->val == value){
			RemoveNode = node->next;
			node->next = node->next->next;
		}

	}
	if (RemoveNode != NULL){
		delete RemoveNode;
		RemoveNode = NULL;
	}

}

좋은 웹페이지 즐겨찾기