使用函数在链表中添加节点

Adding nodes inside a linked list using a function

我尝试使用 CreateRoom 函数来添加新节点。
每次添加节点时,我都会编辑旧的 "lastRoom.next" 并将其设为当前新节点的地址。

然后我将当前新节点的指针设为新的 "lastRoom"
我认为这是个好主意,我不需要 return 任何东西。我觉得这个不错。
然而,它根本不起作用。

我真的很不擅长编码,我刚学C。有人可以帮忙吗?

struct Room {
    int number;
    int status;
    int luxury;
    char occupier[20];
    struct Room *next;
};
//I main copy this kind of code from my lecture notes.
//But It's really crappy. This is the only example I can get from the lecture notes
typedef struct Room Room_t;
Room_t *newRoomNode, *ptr, *prev, *temp;
Room_t *firstRoom = NULL, *lastRoom = NULL;

Room_t* CreateRoom(Room_t **first, Room_t **last, int RoomNumber, int type){
    Room_t *new = (Room_t *)malloc(sizeof(Room_t));
    int *temp;
    if (new == NULL)
    {
        printf("\nMemory was not allocated");
        return 0;
    }
    else
    {
//And then I try my way of adding new nodes. 
//I don't really understand the example so I make my own
        if (*last != NULL)
        {
            (**last).next = new;
        }
        new->number = RoomNumber;
        new->luxury = type;
        new->next = NULL;
        *last = new;
        if (*first=NULL){
            *first=new;
        }
    }
    return 0;
}

void main(){
    CreateRoom(&firstRoom, &lastRoom,1,1);
    printf("%d",(*firstRoom).number);
}
if (*first=NULL){
            *first=new;
}

= 是赋值运算符。您应该使用 == 进行比较。

你真的不应该为最后一个元素操心。 (如果你需要向后遍历列表,除了next之外,你还必须有一个prev成员。)现在,如果你希望CreateRoom()总是在末尾添加一个新元素在列表中,它应该首先遍历整个列表,直到它到达它的末尾——它因为 NULL 指针而识别——然后将 new 指针分配给它到达的位置:

while (*first != NULL)
    first = &(*first)->next;
new->number = RoomNumber;
new->luxury = type;
new->next = *first;
*first = new;

有两点值得注意:

  1. 赋值 *first = new 不知道 first 是 firstRoom 还是实际元素的 next 成员。
  2. 可以省略 while 循环以在开头插入新元素,或修改循环以使元素按您想要的方式排序。