뇌를 자극하는 알고리즘 질의응답 게시판입니다.
2016-05-08
by kindsd
2624
"노드 추가 부분"에서 책과, 제 생각이 무슨 차이인지 잘모르는 부분이 있어 질문드려요.
노드 추가하는 알고리즘으로 책에는 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값이 변경되는데 메인에서 불러오면 주소가 없다고 나오네요...
무슨 차이인지... 잘 모르겠습니다....
설명 부탁드려요...