为什么插入到链表中的代码在第3项上失败?

时间:2015-11-19 15:11:27

标签: c linked-list

我正在尝试编写函数以在第n个位置添加值并从第n个位置删除。当我测试我的插入函数时,它似乎运行良好,但是当我尝试在第三个位置添加一个值时它会卡住。

当我发表评论时,代码效果很好。为什么会这样?

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

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

struct Node *head;  // Global head of the struct

//Function to create New Node with Data and return it
struct Node* NewNode (int data){
    struct Node* temp=(struct Node*)malloc(sizeof(struct Node));
    temp->data=data;
    temp->next=NULL;
    return temp;

}
// Function to add new value in nth Position
void AddN(int data,int n){
    struct Node* temp = NewNode(data);
    struct Node *temp1= head;
    if(n==1){
        temp->next=head;
        head=temp;
    }
    else{
        for(int i=0;i=n-2;i++){
            temp1=head->next;
        }
        temp->next=temp1->next;
        temp1->next=temp;
    }
}

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

void main(){
    head=NULL; //Empty List
    AddN(1,1); //List: 1
    AddN(2,2); //List: 1 2
    //AddN(3,3); //List: 1 2 (3) ( Doesn't work)
    AddN(4,1); //List: 4 1 2 
    AddN(5,2); //List: 4 5 1 2 
    Print();
}

1 个答案:

答案 0 :(得分:1)

一个明显的错误是for循环:

for(int i=0;i=n-2;i++)

此表达式i=n-2不检查相等性,但将值n-2设置为i。也许我&lt;应该有n-2吗?

在for循环的主体中,这个赋值temp1=head->next;也没有任何建设性。

在for循环之后,指针temp1的值可能为NULL,具体取决于传递给函数的索引。以下行temp->next=temp1->next;取消引用指针导致未定义的行为。

另一个问题是,如果插入索引大于1的节点,则不检查head是否为NULL。