Home Forums US Life c++ 아래 짧은 링크드 리스트 코드중 2가지 궁금한것 c++ 아래 짧은 링크드 리스트 코드중 2가지 궁금한것 Name * Password * Email summay 정리: 결국 보이드 린턴 함수를 만들기 위한 약간의 혼동의 값은 지불해야 하는듯. 그런데 print()와 print3() 이나 insertAfter(head,1,21); 와 insertAfter1(head,1,21); 경우는 언뜻 서로 같아보인다...어떤 경우에 차이가 드러나는 경우가 생길까? ` #include <bits/stdc++.h> using namespace std; class node { public: int data; node* next; node(int value) { data = value; next = NULL; } }; void insertAfter(node* head, int key, int val) { node* n = new node(val); if (key == head->data) { n->next = head->next; head->next = n; return; } node* temp ; for( temp = head; temp->data != key; temp = temp->next) // 템프는 헤드로 초기화시켜서 링크드리스트를 아이터레이터처럼 트래버스 시켜줌. 헤드와 같은게 아니라. if (temp == NULL) // key가 없는 경우 return; n->next = temp->next; temp->next = n; } void insertAfter1(node*& head, int key, int val) { node* n = new node(val); if (key == head->data) { n->next = head->next; head->next = n; return; } node* temp ; for( temp = head; temp->data != key; temp = temp->next) // 템프는 헤드로 초기화시켜서 링크드리스트를 아이터레이터처럼 트래버스 시켜줌. 헤드와 같은게 아니라. if (temp == NULL) // key가 없는 경우 return; n->next = temp->next; temp->next = n; } node* deleteFirst1(node *head) { if(head !=NULL) { node *temp = head; head = head->next; free(temp); } return head; } void deleteFirst2(node*& head) { if(head !=NULL) { node *temp = head; head = head->next; free(temp); } //return head; } void insertAtHead(node*& head, int val) { node* n = new node(val); n->next = head; head = n; } node* insertAtHead1(node* head, int val) { node* temp =head; // 오리지날 함수에서 이렇게 살짝 바꾸어줌 node* n = new node(val); n->next = temp; temp = n; head=temp; return head; } void insertAtHead2(node** head, int val) { node* temp =*head; // 오리지날 함수에서 이렇게 살짝 바꾸어줌 node* n = new node(val); n->next = temp; temp = n; *head=temp; } void insertAtHead3(node* head, int val) { node* n = new node(val); n->next = head; head = n; } node* insertAtHead4(node* head, int val) { node* n = new node(val); n->next = head; head = n; return head; } void print(node*& head) { node* temp = head; while (temp != NULL) { cout << temp->data << " -> "; temp = temp->next; } cout << "NULL" << endl; } void print2(node*& head) // 이건 분명히 print(node*& head) 와 다르다. { while (head != NULL) { cout << head->data << " -> "; head = head->next; } cout << "NULL" << endl; } void print3(node* head) // 프린트1은 프린트3과 같은거 처럼 보인다. { node* temp = head; while (temp != NULL) { cout << temp->data << " -> "; temp = temp->next; } cout << "NULL" << endl; } void print4(node* head) // 결국 프린트는 이게 가장 간단하며 좋은 방법인듯 { //node* temp = head; while (head != NULL) { cout << head->data << " -> "; head = head->next; } cout << "NULL" << endl; } int main() { node* head = NULL; insertAtHead(head, 1); // 1 -> NULL insertAtHead(head, 2); // 2 -> 1 -> NULL //insertAtHead3(head, 1); // error //insertAtHead3(head, 2); // error //head=insertAtHead4(head, 1); // head=insertAtHead4(head, 2); //insertAtHead1(head, 1); // NULL //insertAtHead1(head, 2); // NULL //head=insertAtHead1(head, 1); // 1 -> NULL //head=insertAtHead1(head, 2); // 2 -> 1 -> NULL //insertAtHead2(&head, 1); // 1 -> NULL //insertAtHead2(&head, 2); // 2 -> 1 -> NULL print(head); cout << endl; //deleteFirst1(head); // 0 -> 1 -> NULL // Wrong! //head=deleteFirst1(head); // 1 -> NULL deleteFirst2(head); // 1 -> NULL // Correct! print(head); cout << endl; insertAfter(head,1,21); //insertAfter1(head,1,21); print(head); cout << endl; return 0; } ` I agree to the terms of service Comment