单_循环链表_最后连接部分不理解

int InitCLinkList(CLinkList list)
{
int data = 0;
CLinkNode
target = NULL;
CLinkNode* head_node = NULL;

printf("请输入结点数据,0代表结束初始化:\n");
while (1)
{
    scanf("%d", &data);
    if (data == 0)
        break; //退出循环标志,用户输入0 表示结束输入数据

    if (*list == NULL)
    {
        CLinkNode* head= (CLinkNode*)malloc(sizeof(CLinkNode));
        *list = head;//链表指向头结点

        CLinkNode* node = (CLinkNode*)malloc(sizeof(CLinkNode));
        node->data = data;

        node->next = head;
        head->next = node;
    }else{
        //如果循环链表不为空 链尾部插入数据
        //通过循环 找到尾结点,怎样判断是否是尾结点?当结点的指针域指向头结点时为尾结点,这样才能形成环嘛
        //循环结束后target 指向尾结点
        //for 循环下好好理解下!target初始化为第一个结点指针

        for (target = (*list)->next; target->next != *list; target = target->next);
        head_node = target->next;


        CLinkNode* node = (CLinkNode*)malloc(sizeof(CLinkNode));
        node->data = data;

        node->next = head_node;                                 //这个已经指向头了。
        target->next = node;//将新结点插入尾部           //在用头指向它。那中间的不都没有了吗。  不理解。
    }
}
return OK;

}


for (target = (*list)->next; target->next != *list; target = target->next);
执行完后,target是指向单链表的尾节点。
head_node = target->next;
head_node 指向首节点

head_node->xxx->xxx->xxx->target // target->next = head_node

添加新节点后:

node->head_node->xxx->xxx->xxx->target // target->next = node