从数组中插入链表节点,但不是所有节点都插入

时间:2013-06-20 06:59:10

标签: c arrays linked-list

我有以下双链表结构:

struct coords
{
    int x;
    int y;
    struct coords* previous;
    struct coords* next;
};

我有一个包含以下值的链接列表,此处显示为(x,y):

head                                                          tail
(-1, -1) <--> (0, 1) <--> (2, 1) <--> (1, 0) <--> (0, 2) <--> (-1, -1)

在我的实现中,head和tail总是为(-1,-1)。我还有新的Coords,一个4号的coords *数组*,其中包含以下元素:

[(0, 2), (2, 2), (1, 3), no value]

newCoords可以包含零到四个指定元素之间的任何位置。我还跟踪一个名为newCoords的int中的节点数(当前值为3)。我想将这些节点添加到我的链表中,尾部和最后一个非尾节点之间。为此,我有以下代码(为清楚起见,删除了打印语句):

void insert (struct coords* position, struct coords* newCoord)
    {
        newCoord->next = position->next;
        newCoord->previous = position;
        position->next = newCoord;
    }
... //here I create the initial linked list
struct coords* newCoords[4]; //4 is the maximum number of new coords that can be added
int numberOfNewCoords = 0;
... //here I fill newCoords, and as I do I increment numberOfNewCoords by 1
if (numberOfNewCoords > 0) //numberOfNewCoords stores the number of coords in newCoords
    {
        struct coords* temp = tail->previous;
        /* add new possible locations to list */
        for (int i = 0; i < numberOfNewCoords; i++)
            {
                insert(temp, newCoords[i]);
                temp = temp->next;
            }
     }

newCoords中的前两个值正如我预期的那样添加。但是,最后一个值未插入链接列表中。插入的位置应该是每次运行程序时数字都会更改的节点。列表应该是

head                                                                                              tail
(-1, -1) <--> (0, 1) <--> (2, 1) <--> (1, 0) <--> (0, 2) <--> (0, 2) <--> (2, 2) <--> (1, 3) <--> (-1, -1)

但是它是

head                                                                                                          tail
(-1, -1) <--> (0, 1) <--> (2, 1) <--> (1, 0) <--> (0, 2) <--> (0, 2) <--> (2, 2) <--> (9765060, 9770824) <--> (-1, -1)

2 个答案:

答案 0 :(得分:0)

为了澄清一下,您确定使用malloc来分配内存吗?

答案 1 :(得分:0)

我猜你错过了为你想要添加的新坐标分配内存。当我们向现有列表添加新元素时,我们应该确保事先分配内存以为新元素提供空间。 您发布的代码需要在此部分进行修改 -

    for (int i = 0; i < numberOfNewCoords; i++)
                {
                    insert(temp, newCoords[i]);
                    temp = temp->next;
                }

变更后 -

    for (int i = 0; i < numberOfNewCoords; i++)
                {
                    temp = malloc(sizeof(struct* coords));
                    insert(temp, newCoords[i]);
                    temp = temp->next;
                }

如果编译器不支持使用(struct *)

进行自动类型转换,则可以对malloc进行类型转换

希望这会奏效。