연결 목록은 서로 연결된 여러 노드가 있는 선형 데이터 구조입니다. 각 노드는 데이터 필드와 다음 노드의 주소라는 두 개의 필드로 구성됩니다.
단일 연결 목록이 있고 이 연결 목록에서 첫 번째 노드를 삭제해야 한다고 가정해 보겠습니다. 예를 들어,
입력 1 − 4 → 3 → 2 → 1
출력 − 3 → 2 → 1 →
설명 - '4'는 주어진 단일 연결 리스트의 첫 번째 노드입니다. 첫 번째 노드를 삭제하면 연결 리스트는 3→2→1이 됩니다.
입력 2 − 1 → 2 → 3 →
출력 − 2 → 3 →
설명 − 첫 번째 노드 '1'을 삭제하면 연결 리스트는 2 → 3이 됩니다.
이 문제를 해결하기 위한 접근 방식
처음에는 노드로 구성된 연결 목록이 있습니다. 각 노드는 다음 노드에 대한 데이터와 주소를 포함합니다. 연결 리스트에 데이터를 삽입한 후 첫 번째 노드를 삭제하는 함수를 생성합니다.
따라서 처음에 머리를 가리키고 머리를 다음 노드로 이동하는 임시 포인터를 만듭니다. 이제 임시 노드를 삭제하고 연결 목록을 반환합니다.
-
deleteAthead(node*&head) 함수는 헤드에 대한 포인터를 가져와 연결 목록의 첫 번째 노드를 삭제합니다.
-
처음에 머리를 가리키는 임시 포인터를 만듭니다.
-
헤드가 다음 노드로 이동합니다.
-
임시 포인터를 삭제합니다.
-
연결 목록을 반환합니다.
예시
#include<iostream> using namespace std; int main(){ class node{ public: int data; node*next; node(int d){ data=d; node*next=NULL; } }; void insertAtFirstNode(node*&head, int data){ node*n= new node(data); n->next= head; head=n; } void print(node*head){ while(head!=NULL){ cout<<head->data<<"->"; head=head->next; } cout<<endl; } void deleteAtFirst(node*&head){ if(head==NULL){ return; } node*temp=head; head= head->next; delete temp; return; } int main(){ node*head= NULL; insertAtFirstNode(head,1); insertAtFirstNode(head,2); insertAtFirstNode(head,3); insertAtFirstNode(head,4); deleteAtFirst(head); print(head); }
출력
위의 코드를 실행하면 출력이 다음과 같이 생성됩니다.
3 → 2 → 1 →
주어진 단일 연결 리스트는 4 → 3 → 2 → 1 → 이므로 첫 번째 노드인 4를 삭제하면 연결 리스트는 3 → 2 → 1 →
가 됩니다.