我试图在链表的末尾插入元素,但是while循环没有终止。我无法理解为什么会这样。这是我的代码。
我在main()函数中调用此函数。
struct node{
int data;
struct node* link;
};
struct node * head;
void insert_last(int element){
struct node * temp = (node*)malloc(sizeof(struct node));
temp->data = element;
temp->link = NULL;
if(head==NULL){
head = temp;
}
struct node * temp1 = head;
while(temp1->link!=NULL){
temp1 = temp1->link;
}
temp1->link = temp;
}
这是主要方法:
int main()
{
head = NULL;
printf("Enter the no. of nodes or elements you want to make linked list of. ");
int n;
scanf("%d",&n);
int element = 0;
for(int i = 0; i<n; i++){
printf("Enter the element\n");
scanf("%d",&element);
insert_last(element);
std::cout<<"Element inserted\n\n";
}
//print_recursive(head);
print();
}
答案 0 :(得分:2)
这很容易。
if(head==NULL){
head = temp;
}
在这种情况下,你已经完成了你在做什么。如果继续,temp1
将成为temp
。然后temp1->link = temp;
使此节点指向自身。第二次插入永远不会找到结束,因为您的列表现在是循环的,while(temp1->link!=NULL)
永远不会结束。
你应该做的只是放return;
。
if(head==NULL){
head = temp;
return;
}