더블 링크드 리스트(DLL) 관련입니다.
DLL에서 노드삭제를 하려면 삭제할 노드의 NextNode 포인터가 가리키고 있던 노드를 앞 노드의 NextNode 포인터가 가리키게 바꾸고,
또 삭제할 노드의 PrevNode 포인터가 가리키고 있던 노드를 뒷 노드의 PrevNode 포인터가 가리키게 바꾼다. 그리고 삭제할 노드의 NextNode와 PrevNode는 깨끗하게 NULL로 초기화합니다.
네 말로된 설명은 이해를 하겠는데요. 요것을 c코드로 구현해보면
void DLL_RemoveNode (Node** Head, Node* Remove)
{
if ( *Head == Remove )
{
*Head = Remove -> NextNode;
if ( (*Head) != NULL )
( *Head ) -> PrevNode = NULL;
Remove -> PrevNode = NULL;
Remove -> NextNode = NULL;
}
else
{
Node* Temp = Remove;
Remove -> PrevNode -> NextNode = Temp -> NextNode;
if ( Remove -> NextNode != NULL )
Remove -> NextNode -> PrevNode = Temp -> PrevNode;
Remove -> PrevNode = NULL;
Remove -> NextNode = NULL;
}
}
-------------------------
이렇게 된다는데요. 다좋은데 Remove -> PrevNode -> NextNode = Temp -> NextNode; 요런 문장같이
\"->\" 가 많아서 해석을 잘 못하겠습니다. \"->\"이 들어간 문장들을 어떻게 해석하고 이해해야하나요?
서론이 너무 길어 죄송합니다..
-------------------------
구조체 포인터로 받은 넘의 내용물 접근
-> 이걸 모르는데 링크드 리스트를 한다는게 왠말? 웬말?
ㄴ 제발좀 알려주세요 Remove -> PrevNode -> NextNode = Temp -> NextNode; 이것만 한글로 풀어서 설명해주실수없으신가요?
지울 넘 NULL 대입하는 거도 삽질이네. 메모리 풀으면 사라질 넘인데
메모리 풀지도 않거니와
Remove -> PrevNode -> NextNode = Temp -> NextNode; 이 문장만 한글로 풀어서 설명해주실수없으신가요 dot형님..
이거 종이에 그려서 보셈. 노드를 박스로 하고 링크는 선으로 해서 그려보셈
지울 새끼 뒷 넘이 지울 넘 앞 넘 찍게 해주는 거임
Remove->PrevNode 가 제거하고 PrevNode를 가리킨다는건가요? 어떤방식으로 노드제거하는지 이해는 했는데 c코드를 보고 이해하려니 -> 때문에 이해가안가서요;
지운 적도 없는데 지웠다고 하지마셈. 그냥 링크만 끊어놓고서
일단 c문법부터 완전히 훑어라도 봐야한다고 봄. -> 이것만 알려줘서 뭔 소용... 지울 놈의 앞 놈의 다음노드를 가리키는 포인터에다가 temp의 다음 노드를 대입하는 건데
설마 -> 자체가 뭔지 모르나?
그만 알려줘야지 이러다 삭제하고 먹튀하면 나 상처입음
네.. ->자체를 모르고있어요.. c에서 포인터 배울때는 못봤던거같은데;; -> 이게뭔가요..
화살표
구조체 포인터로 받은 넘의 내용물 접근
아.. -> 이게 c 거의 맨끝부분에서 등장하는거군요.. 전 함수포인터,void포인터 이쯤까지밖에 공부를 안해놓고 섣불리 알고리즘을 공부하는게 실수였네요.. 일단 c 나머지부분부터 공부해야겠어요 댓글주신 모든 형님들 고맙습니다
기본 문법부터 깨치고 다른 거 하셈. End communication.
섣불리 알고리즘 공부하는 거 뭐라할건 아니라고 보지만 모르는 글자가 나오면 책이 있다면 책을 뒤지고, 검색을 해보던가 하는게 먼저 아닌가 싶군여
ㄴ네네 죄송합니다.. -> 이게 문법개념인지는 꿈에도 몰랐어요