最后使用tail

时间:2019-04-06 10:22:43

标签: c

在主要功能中,我使用一个功能创建了一个头部并向前推动,它可以按预期工作。

但是,使用此功能在已创建的节点的末尾添加信息后,就不会了。

回推数据不会附加到链接列表中。

下面是我的代码;

// function pushback using tail   
void push_back_t(Node *tail, int data) {
    Node *Sn = (Node*)malloc(sizeof(Node));  //creation of the new node called Sn
    if (Sn == NULL) {
        printf("Erreur");
        exit(3);
    }
    Sn->data = data;  //to add the data to the new node
    Sn->Next = NULL;
    tail->Next = Sn;  //make the last Node that tail already point points on the new node
    tail = Sn;  //make tail to the last and new node 
}

我在做什么错,我该如何解决?

2 个答案:

答案 0 :(得分:0)

您必须在调用代码中更新tail。或者,您可以将指针传递到tail指针:

// function pushback using tail   
void push_back_t(Node **tail, int data) {
    Node *Sn = (Node *)malloc(sizeof(Node));  //creation of the new node called Sn
    if (Sn == NULL) {
        printf("Erreur");
        exit(3);
    }
    Sn->data = data;  //to add the data to the new node
    Sn->Next = NULL;
    if (*tail) {
       (*tail)->Next = Sn;  //make the last Node that tail already point points on the new node
    }
    *tail = Sn;  //make tail point to the new last node
}

答案 1 :(得分:0)

之所以会发生这种情况,是因为尾部是通过值传递的,因此您正在函数中更改它的副本,而不是原始的。

您必须更改函数以使其使用指向Node i的指针。 e。节点** tail,并在函数内取消引用。

void push_back_t(Node **tail, int data) {
    ... 
    if(*tail) {
        (*tail)->Next = Sn;
    } 
    *tail = Sn;
}