繁体   English   中英

将新节点附加到链表

[英]Appending a new node to linked list

基本上就是标题所说的,我正在尝试 append (添加到我的列表末尾)。 我的 BuildList function 接受一个大小参数,该参数确定列表将有多少个节点。 我的问题是我的 append function。 因此,如果我的头是 5,我该如何修复我的 append function 以便在 5 之后添加随机数?

typedef struct Node
{
    int value;
    struct Node* next;
} Node;

Node *createNode( int num )
{
    Node *ptr;
    ptr = (Node *) malloc( sizeof( Node ) );

    ptr->value = num;
    ptr->next = NULL;

    return ptr;
}
Node* append (Node* head, Node* newNode)
{


    if (head == NULL)
        return newNode;

    while (head -> next != NULL);

    head -> next = newNode;
    return head;
}
Node* buildList (int size)
{
    Node* newNode = (Node*) malloc (sizeof(Node));
    Node* head = NULL;

    for (int i = 0; i < size; i++)
    {
        Node* newNode = createNode (rand () % 10);
        head = append (head, newNode);
    }
    return head;
}

嗯,最明显的问题是这个

while (head -> next != NULL);

我相信你打算写这样的东西

Node *tmp = head;
while (tmp -> next != NULL) {
    tmp = tmp->next;
}
tmp->next = newNode;

您不想在此处修改head ,因为您稍后会在 function 中返回它。 如果您不使用tmp , head 将始终指向列表中的倒数第二个节点。

你只需要修改你的while,为什么你那里有一个空指令? 如果头部不是 NULL 那么你永远不会退出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM