在单个链接列表的末尾插入一个元素

时间:2014-10-04 14:19:48

标签: c linked-list

我从早上开始尝试修复此代码,但可以完成它。所以,最后我需要一些帮助来搞清楚错误。代码编译时没有错误,但是当我从终端运行它时出现错误,说“segmetation error:11”

#include <stdio.h> 
#include <stdlib.h> 


struct Node{
    int data; 
    struct Node *next; 
};


struct Node *head; 


void Insert(int data); 
void Print();  


int main()
{
    head = NULL; //list is empty

    Insert(3); 
    Insert(5); 
    Insert(2); 
    Insert(8); 

    Print(); 

    return 0;  
} 


void Insert(int data) 
{
    struct Node *temp = malloc(sizeof(struct Node)); 

    temp->data = data; 
    temp->next = NULL; 

    struct Node *temp1 = head;

    while(temp1 != NULL) 
    { 
        temp1= temp1->next; 
    } 

    temp1->next = temp; 
}


void Print()
{ 
    struct Node *temp =head; 

    while(temp != NULL)
    { 
        temp = temp->next; 
        printf("%d", temp->data); 
    } 
}

4 个答案:

答案 0 :(得分:2)

  1. 您从未将head设置为NULL以外的任何内容。

  2. (即使您已经解决了上述问题){J} <} {}

  3. 时,temp1保证为NULL。{/ 1>}

    P.S。我认为称之为变量temp1->next = temp;temp等是一种很好的做法。从这些名称来看,无法判断它们的假设功能是什么。

答案 1 :(得分:0)

你正在写

while(temp1 != NULL)

像这样做

while(temp1->next != NULL)

这里,temp1在循环结束时指向null,并且您尝试在null之后添加节点,即

null->next =temp;

必须抛出错误。

答案 2 :(得分:0)

通常,单个链接列表具有插入操作,该操作在列表的开头插入数据。不过你的函数插入可以看下面的方式

void Insert( int data ) 
{
    struct Node *temp = malloc(sizeof( struct Node ) ); 
    temp->data = data; 
    temp->next = NULL; 

    if ( head == NULL )
    {
        head = temp;
    }
    else
    {
        struct Node *current = head;
        while ( current->next != NULL ) current = current->next;
        current->next = temp;
    }
}

如果您检查函数是否已分配节点,那会更好。

功能打印也是错误的。它看起来像

void Print( void )
{ 
    for ( struct Node *current = head; current != NULL; current = current->next )
    { 
        printf( "%d ", current->data ); 
    } 
}

答案 3 :(得分:0)

struct Node *curr;

void Insert(int data){
    struct Node *temp = malloc(sizeof(struct Node));
    temp->data = data;
    temp->next =NULL;

    if(head == NULL)
        curr = head = temp;
    else
        curr = curr->next = temp;
}

void Print(){
    struct Node *temp =head; 
    while(temp != NULL){ 
        printf("%d ", temp->data); 
        temp=temp->next; 
    } 
}