编写将链表中的两个节点组合在一起的函数

时间:2014-02-12 09:31:41

标签: c++ linked-list

我在我的内存管理器程序中编写了一个查看链表的函数,并测试节点是否在字节上彼此相邻,然后将它们合并为一个。物理上在自由节点旁边的节点当前可能正在保存内存,在这种情况下它不会被合并。我无法弄清楚如何让它工作,我要么得到无限循环或没有合并。

void IfFreeTogether(void)
{
    FREEPTR l =freelist;
    FREEPTR f = freelist;
    FREEPTR g = f->next;
    int i = 0;
    while(l!=NULL)
    {

        if(f->start_byte-1 == g->end_byte)
        {       
            g->size = g->size + f-> size;
            g->end_byte = f-> end_byte;
            g->next = f->next;

            l=g->next;
        }

        if(f->end_byte+1 == g->start_byte)
        {
            f->size = f->size + g-> size;
            f->end_byte = g-> end_byte;
            f->next = g->next;

            l=f->next;
        }
    }       
}

1 个答案:

答案 0 :(得分:1)

在您发布的代码段中,似乎l是唯一在循环中为其分配新值的var,但fg是唯一正在阅读的内容(尽管如此)事实上,他们只被初始化了一次而且从未改变过。)

这意味着您不会对列表进行任何更改。更糟糕的是 - 由于l仅由gf分配,您实际上甚至不会将l提升到任何新的位置,从而导致无限循环(角落除外)您实际设法合并整个列表的情况)