char dinsert(DListNode *before, element data)
{
DListNode *newnode = (DListNode *)malloc(sizeof(DListNode));
strcpy(newnode, data);
newnode->llink = before;
newnode->rlink = before->rlink;
before->rlink->llink = newnode; ////
before->rlink = newnode;
}
여기서 rlink 랑 llink 개념이 이해가 안되요 ㅠㅠ
특히 //// 부분은 먼소린지
소스 전체를 본건 아니지만 아마 양방향 링크드 리스트고 llink는 왼쪽링크 rlink는 오른쪽 링크겠네 이렇게 생각해서 다시보면 이해될거임
llink rlink보다 prev next로 생각해봐
strcpy(newnode, data); 에서 newnode에 data값을 넣는것같고
newnode->prev = before; 듀얼링크드리스트는 이전 노드와 다음 노드를 가리키는 주소값을 갖고있음
새로 추가한 노드의 이전노드를 before로 하고
newnode->next = before->next; 새로 추가한 노드의 다음노드는 이전 노드가 가리키는 다음 노드로 설정해줌
그럼이제 새 노드가 이전노드와 다음노드를 가리키게 바꿔줬으니 기존 노드간의 연결을 끊는거임
before->next->prev = newnode; 이전노드의 다음노드 안의 prev가 새 노드를 가리키게 만들고
before->rlink = newnode; 이전 노드의 next가 새 노드를 가리키게 만들면 삽입이 끝난거
행님 감사합니다