Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 값보다 큰 이중 연결 목록에서 모든 노드를 삭제합니다.

<시간/>

이 튜토리얼에서는 이중 연결 리스트에서 모든 프라임 노드를 삭제하는 방법을 배울 것입니다.

문제를 해결하는 단계를 살펴보겠습니다.

  • 데이터, 이전 및 다음 포인터로 구조체를 작성합니다.

  • 이중 연결 리스트에 노드를 삽입하는 함수를 작성하십시오.

  • 더미 데이터로 이중 연결 리스트를 초기화합니다.

  • 이중 연결 목록을 반복합니다. 현재 노드 데이터가 주어진 값보다 큰지 여부를 찾습니다.

  • 현재 데이터가 주어진 값보다 크면 노드를 삭제합니다.

  • 노드를 삭제하는 함수를 작성하십시오. 노드를 삭제할 때 다음 세 가지 경우를 고려하십시오.

    • 노드가 헤드 노드인 경우 헤드를 다음 노드로 이동합니다.

    • 노드가 중간 노드인 경우 다음 노드를 이전 노드에 연결

    • 노드가 끝 노드인 경우 이전 노드 링크를 제거합니다.

코드를 봅시다.

#include 네임스페이스 std;struct Node { int data; Node *prev, *next;};void insertNode(Node** head_ref, int new_data) { Node* new_node =(Node*)malloc(sizeof(struct Node)); new_node->data =new_data; new_node->이전 =NULL; new_node->next =(*head_ref); if ((*head_ref) !=NULL) { (*head_ref)->이전 =new_node; } (*head_ref) =new_node;}void deleteNode(Node** head_ref, Node* del) { if (*head_ref ==NULL || del ==NULL) { return; } if (*head_ref ==del) { *head_ref =del->next; } if (del->next !=NULL) { del->next->prev =del->prev; } if (del->prev !=NULL) { del->prev->next =del->next; } 무료(델); return;}void deleteGreaterNode(노드** head_ref, int K) { 노드* temp =*head_ref; 노드* 다음; while (temp !=NULL) { 다음 =임시->다음; if (temp->data> K) { deleteNode(head_ref, temp); } 온도 =다음; }} 무효 printLinkedList(노드* 헤드) { 동안 (헤드 !=NULL) { cout <<헤드->데이터 <<" -> "; 머리 =머리 -> 다음; }}int main() { 노드* 헤드 =NULL; 삽입노드(&헤드, 1); 삽입노드(&헤드, 2); insertNode(&head, 3); insertNode(&head, 4); insertNode(&head, 10); insertNode(&head, 11); insertNode(&head, 12); 정수 K =10; cout <<"삭제 전 연결 리스트:" < 

출력

위의 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

삭제 전 연결 리스트:12 -> 11 -> 10 -> 4 -> 3 -> 2 -> 1 ->삭제 후 연결 리스트:10 -> 4 -> 3 -> 2 -> 1 -> 

결론

튜토리얼에서 질문이 있는 경우 댓글 섹션에 언급하세요.