谁可以帮我解释一下while里面那三个语句

void DestroyList(ListLink &L) {// 初始条件:线性表L已存在。操作结果:销毁线性表L( ListLink q; while (L) { q = L->next; free(L); L = q; } }这是线性表的链式操作,我不明白while里面那三个语句,执行之后能把线性表销毁吗?
void DestroyList(ListLink &L) {// 初始条件:线性表L已存在。操作结果:销毁线性表L( ListLink q; while (L) { q = L->next; free(L); L = q; } }这是线性表的链式操作,我不明白while里面那三个语句,执行之后能把线性表销毁吗?