在链表的末尾插入元素

时间:2014-08-13 09:15:48

标签: c++ linked-list

我试图在链表的末尾插入元素,但是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();
}

1 个答案:

答案 0 :(得分:2)

这很容易。

if(head==NULL){
    head = temp;
}

在这种情况下,你已经完成了你在做什么。如果继续,temp1将成为temp。然后temp1->link = temp;使此节点指向自身。第二次插入永远不会找到结束,因为您的列表现在是循环的,while(temp1->link!=NULL)永远不会结束。

你应该做的只是放return;

if(head==NULL){
    head = temp;
    return;
}