qq_26408019 2019-02-21 18:01 采纳率: 0%
浏览 394

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

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;

}


  • 写回答

1条回答 默认 最新

  • jinwoyunni 2019-02-22 09:29
    关注

    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

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题