연결 목록은 서로 연결된 여러 노드가 있는 선형 데이터 구조입니다. 각 노드는 데이터 필드와 다음 노드의 주소라는 두 개의 필드로 구성됩니다.
단일 연결 목록이 있고 이 연결 목록에서 첫 번째 노드를 삭제해야 한다고 가정해 보겠습니다. 예를 들어,
입력 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 →
가 됩니다.