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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题