这是我的单链表的代码:
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()
进行哪些更改以实现上述结果?
答案 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
的第三个实际上正在删除列表的其余部分。