개발자 블로그
[Linked List Stack]Pop함수 구현시 TopNode, HeadNode 처리 본문
Node* LLS_Pop(LinkedListStack* Stack) {
//1. 최상위 노드의 주소를 다른 포인터에 복사
//2. 새로운 최상위 노드(현재 최상위 노드)의 바로 아래(이전) 노드를 찾는다.
//3. LinkedListStack 구조체의 Top 필드에 새로운 최상위 노드의 주소를 등록한다.
//4. 1에서 포인터에 저장했던 예전 최상위 노드의 주소를 반환한다.
Node* TopNodePtr = Stack->tailNode;
Node* CurrentNodePtr = Stack->headNode;
while (CurrentNodePtr->nextNode != TopNodePtr) {
CurrentNodePtr = CurrentNodePtr->nextNode;
}
Stack->tailNode = CurrentNodePtr;
return TopNodePtr;
}
Node가 하나일 경우에 대해서 처리를 안함.
하나일경우에는 Push함수에서 HeadNode, TopNode에 모두 동일한 주소값을 넣었던 상태이고
Next 값은 NULL 인상태임
따라서 Node 하나일 경우에 대해서 처리를 하려면
if( Stack->tailNode == Stack->tailNode ) 조건을 넣고
NULL 로 만들어 놓고 리턴을 하면됨
2차 시도
Node* LLS_Pop(LinkedListStack* Stack) {
//1. 최상위 노드의 주소를 다른 포인터에 복사
//2. 새로운 최상위 노드(현재 최상위 노드)의 바로 아래(이전) 노드를 찾는다.
//3. LinkedListStack 구조체의 Top 필드에 새로운 최상위 노드의 주소를 등록한다.
//4. 1에서 포인터에 저장했던 예전 최상위 노드의 주소를 반환한다.
Node* TopNodePtr = Stack->tailNode;
//Node 가 하나인 경우 확인
if(Stack->headNode == Stack->tailNode){
//Node 정보 삭제
Stack->headNode = NULL;
Stack->tailNode = NULL;
}else{
//Node 정보가 여러개인 경우
//최상위 노드값을 따로 저장해놓고
//바로 직전의 노드 주소를 찾아서 Stack->tailNode 주소를 변경한다.
Node* CurrentNodePtr = Stack->headNode;
while (CurrentNodePtr->nextNode != TopNodePtr) {
CurrentNodePtr = CurrentNodePtr->nextNode;
}
Stack->tailNode = CurrentNodePtr;
}
return TopNodePtr;
}
또 틀린 내용, 마지막 쯤에서 tailNode(TopNode)의 Next값을 Null로 변경해줘야 하는점을 놓침(마지막에서 3번째 줄)
Node* LLS_Pop(LinkedListStack* Stack) {
//1. 최상위 노드의 주소를 다른 포인터에 복사
//2. 새로운 최상위 노드(현재 최상위 노드)의 바로 아래(이전) 노드를 찾는다.
//3. LinkedListStack 구조체의 Top 필드에 새로운 최상위 노드의 주소를 등록한다.
//4. 1에서 포인터에 저장했던 예전 최상위 노드의 주소를 반환한다.
Node* TopNodePtr = Stack->tailNode;
//Node 가 하나인 경우 확인
if(Stack->headNode == Stack->tailNode){
//Node 정보 삭제
Stack->headNode = NULL;
Stack->tailNode = NULL;
}else{
//Node 정보가 여러개인 경우
//최상위 노드값을 따로 저장해놓고
//바로 직전의 노드 주소를 찾아서 Stack->tailNode 주소를 변경한다.
Node* CurrentNodePtr = Stack->headNode;
while (CurrentNodePtr->nextNode != TopNodePtr) {
CurrentNodePtr = CurrentNodePtr->nextNode;
}
Stack->tailNode = CurrentNodePtr;
//2024.04.25.
//또 틀린 내용, 마지막 쯤에서 tailNode(TopNode)의 Next값을 Null로 변경해줘야 하는점을 놓침
Stack->tailNode->nextNode = NULL;
}
return TopNodePtr;
}
'자료구조_구현시 실행착오 정리' 카테고리의 다른 글
[Linked List Stack]Push 함수 구현시 Top 노드의 NextNode (0) | 2024.04.24 |
---|---|
[Linked List Stack]CreateNode 함수 구현시 입력 인자는 당연히 Data가 와야한다. (0) | 2024.04.23 |
[Linked List Stack]Push 함수 구현시 node 변수 heap 할당 위치 (0) | 2024.04.23 |