数据结构单循环链表

时间:2018-01-11 06:01:45

标签: c data-structures singly-linked-list

这是我的单链表的代码:

void addtoempty(int data)
{
    if (last->next == NULL)
    {
        struct node* new_node = malloc(sizeof(struct node));
        new_node->data = data;
        last->next = new_node;
        new_node->next = new_node;
    }
    else
    {
        printf("element exists\n");
    }
}

void insert(int data)
{
    if (last->next == NULL)
        addtoempty(data);
    else
    {
        // intf("now insert vl happen\n");
        struct node* new_node = malloc(sizeof(struct node));
        new_node->data = data;
        new_node->next = last->next;
        last->next->next = new_node;
        last->next = new_node;
    }
}

void display()
{
    print = last->next->next;
    do
    {
        printf("%d \t", print->data);
        print = print->next;
    } while (print != last->next->next);
    printf("\n");
}

我想仅使用尾指针在单个循环链表中的节点之后插入一个元素。可能吗?如果有,怎么样?在上述程序中,应该对insert()进行哪些更改以实现上述结果?

1 个答案:

答案 0 :(得分:4)

问题出在insert。您正在设置三个next指针:

new_node->next = last->next;
last->next->next = new_node;
last->next = new_node;

你应该只设置两个:

new_node->next = last->next;
last->next = new_node;

设置last->next->next的第三个实际上正在删除列表的其余部分。