메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

노드 추가 관련 질문이요!!

2016-05-08

|

by kindsd

2200

"노드 추가 부분"에서 책과, 제 생각이 무슨 차이인지 잘모르는 부분이 있어 질문드려요.

 

노드 추가하는 알고리즘으로 책에는 1과 같이 되어 있습니다.

 

1) 책에 있는 알고리즘

//테일을 찾아 NewNode를 연결한다.

Node* Tail = (*Head);
  while (Tail->NextNode != NULL) { 
   Tail = Tail->NextNode;
  }
Tail->NextNode = NewNode;

 

2) 비교 알고리즘(제 생각)

Node* Tail = (*Head);
  while (Tail != NULL) { 
   Tail = Tail->NextNode;
  }
Tail = NewNode;

 

2번처럼 NULL이 되는 시점을 찾고 거기다 새로운 노드를 넣어도 되는거 아닌가요...?

제 생각에 이해를 2번 돕기 위해 2번 알고리즘을 아래와 같이 도식화 하였습니다.

 

1)테일에 헤드포인터 전달

헤드, 테일

 ↓

[  값  | 주소 ] -> NULL

  (기존노드)

 

2) 널이 아닐때까지 반복을 통해 테일 위치 이동(널이므로 반복 종료)

헤드                 테일

 ↓                    ↓

[  값  | 주소 ] -> NULL

  (기존노드)

 

3) Tail = NewNode; (테일에 뉴노드 저장)

헤드                 테일

 ↓                    ↓

[  값  | 주소 ] -> [  값  | 주소 ] -> NULL

  (기존노드)         (NewNode)

 

=> 그림 처럼 이렇게 해도 되는거 아닌가요..?

그런데 이렇게 하면 안되더라고요..

함수에서는 Tail값이 변경되는데 메인에서 불러오면 주소가 없다고 나오네요...

무슨 차이인지... 잘 모르겠습니다....

설명 부탁드려요...

 

댓글 입력
자료실