단일 연결 리스트 공부를 하는 도중에 한 라인이 이해가 되질 않아서요...


질문드릴 코드...
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
        int data;
        struct _node *link;
}DATA, *PDATA;

PDATA nodeAlloc(int data) {
      PDATA p = (PDATA)malloc(sizeof(DATA));
      p->data = data;
      p->link = NULL;
      return p;
}

PDATA insertNode(PDATA head, int data) {
      PDATA p = head, n = nodeAlloc( data );
      
      if(head == NULL)
              return n;
      while(p->link)                        // 이해가 되지않는
              p = p->link;                        // 두 라인...
      p->link = n;
      
      return head;
}

void printNode(PDATA p) {
     for( ; p ; p = p->link)
          printf(\"%4d\", p->data); }
          
main() {
       PDATA head = NULL, p = NULL;
       
       head = insertNode(head, 10);
       head = insertNode(head, 20);
     
       printNode(head);
           }


질문: 저 두 라인을 어떻게 이해해야할까요?

while... p->link가 참이면? 흠....
while속 조건문이 참이라면 그 속의 내용이 실행되고,
p = p->link가 실행될텐데....

단일 연결 리스트가 어떻게 이어지는지에 대해선 
다른 예제를 통해 이해가 완료된 상태인데...

저 두 라인을 이해할수가 없네요... 도와주세요!

컴파일러: Bloodshed Dev-C++ 4.9.9.2
사용 운영체제: Windows XP SP3 (32bit)
사용 언어: C언어