해결된 질문
작성
·
170
1
printAll까지 구현한상태인데 insertAt에서 여기부분 반대로 했을뿐인데 왜 4에서 무한루프도는지 이해가안되네여.
currentNode의 next를 먼저정하는것이 흐름상 newNode정하고 newNode.next를 currentNode의 .next로하려고햇는데 루프도는 이유를 모르겟네여 .ㅎㅎㄷ
답변 2
2
currentnode.next = newnode
newnode.next = currentnode.next
현재 질문자님이 작성하신 코드는 이런 상황 입니다.
currentnode -> currentcode.next == newnode -> newnode.next == newnode -> newnode.next == newnode....
둘의 위치를 바꿔준다면 정상적으로 작동할 것 같습니다.
currentnode는 현재 반복문을 돌아 마지막 node이므로 currentnode.next는 null 값이 들어있을 것입니다.
newnode를 마지막에 추가하는것이 목적이라면 newnode.next = currentnode.next를 넣어주시고,
currentnode.next에 newnode를 넣어주면 정상 연결 될 것입니다.
1
안녕하세요 top gwa님!
currentNode.next = newNode; 를 먼저 시도해보시다가 무한루프에 빠지셨군요.
해당 코드는 newNode.next = currentNode.next; 가 먼저 오지 않으면 제대로 동작하지 않습니다.
이유는 코드 옆에 주석으로 달아보겠습니다.
for(let i = 0; i < index - 1; i++){ // 새로운 노드가 삽입될 노드를 찾습니다.
currentNode = currentNode.next;
}
currentNode.next = newNode; // 현재 노드의 다음노드가 새로운 노드를 가리킵니다. 즉 새로운 노드를 삽입합니다.
// 여기까지는 문제가 없지만 newNode의 next를 기존 curretnNode의 next로 해줘야 하는데 위 코드로 currentNode.next의 참조가 바껴 버렸습니다...
newNode.next = currentNode.next; // 그러므로 이 코드는 다음 노드가 아닌 newNode를 가리키므로 자기 자신을 계속 참조하고, 루프에 빠지게 되는 것입니다.
위 순서대로 제대로 동작하게 만들고 싶으시다면
let tempNode = currentNode.next; // currentNode가 가리키는 노드를 잃어버리지 않게 저장해주고
currentNode.next = newNode; // currentNode의 next를 newNode로 바꿔서 참조를 바꿔주더라도
newNode.next = tempNode; // 이렇게 원래 가리키던 노드로 연결을 해줘야 합니다.
핵심은 currentNode.next를 잃어버리지 않고 newNode의 next로 잘 연결하는 것입니다.
궁금증이 해결되셨나요?
참조가 바뀌어 버렷군요 .. 감사합니다