繁体   English   中英

C链表和指针

[英]C linked list and pointers

有人可以用指针解释这段代码的作用吗:

    while(terminate== 0)
    {
        s->value=s->next->value; 
        if ((s->next->next)==NULL)
        {
            free(s->next); 
            s->next=NULL;
            terminate= 1;
        }
        s=s->next;
    }

其中s作为参数传递为:set_el * s,并具有以下结构:

 typedef struct set_el
 {
   int value;
    struct set_el* next;
 } set_el;

如果输入NULL,则由于s->value非法,将导致分段错误。

在大小为1的列表上,由于s-> next-> value是非法的,同样会失败。

在具有循环的列表(例如a> b> a ...)上,它将无限循环,因为s-> next-> next永远不会为NULL

最后,在大小为2或更大的链接列表上,它将遍历该列表,将下一个节点的值对应到当前节点,并删除最后一个节点。

有效地,它将以一种非常about回的方式“删除”列表中的第一个节点。 (我们释放了最后一个节点的内存,但将值复制到了列表中。新列表要短1个节点,并且第一个节点中没有值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM