node* InsertNode( int nData, node* p )
{
        // 안전장치
        // 헤드 노드 앞에 노드를 생성하지 못하게
        if( p == pHead )        return NULL;

        node* pNew = new node;                // 새로운 노드를 생성한다(메모리 할당)
        pNew->m_nNumber = nData;        // 새로운 노드에 데이터값을 넣는다

        // 새로 만든 노드의 좌측부분
        p->m_pPrev->m_pNext = pNew;        // p의 앞 노드의 m_pNext가 새로 만든 노드를 가르키게 한다
        pNew->m_pPrev = p->m_pPrev;        // 새로 만든 노드의 m_pPrev가 p의 앞 노드를 가르키게 한다

        // 새로 만든 노드의 우측부분
        p->m_pPrev = pNew;                        // p의 m_pPrev가 새로 만든 노드를 가르키게 한다
        pNew->m_pNext = p;                        // 새로 만든 노드의 m_pNext가 p를 가르키게 한다

        return pNew;        // 새로 만든 노드를 리턴한다
}

새로운 노드를 삽입하는 함수인대
여기서 InsertNodee(10)
이런식으로 int nData에 해당하는 데이터값만 넣고
node* p에 해당하는값은 안넣어도 멀쩡하게
노드 추가가 되던대 어떻개 원리가 대체 뭘까요?