Относительно вашего текущего кода:
void pushBack(List *list, int *data)
{
Node *node = createNode(data);
while ( list -> head )
list -> head = list -> head -> next;
list -> head = node;
list -> size ++;
}
Нажатие чего-либо в конец списка должно только изменить заголовок , если список ранее был пустым. То, что вы делаете, на самом деле портит список, перемещая его туда, где не должно быть.
Вы возможно имели в виду использовать current
вместо head
(после первой установки, конечно, на head
), но для этого необычно выделять поле для этого в самом списке - вы обычно просто используют временную переменную.
Вам было бы гораздо лучше хранить хвост, чтобы вам не приходилось искать его каждый раз (a) . Но, предполагая, что это не вариант, следующий псевдокод должен помочь вам:
def push_back(list, item):
# Force tail constraints, new tail must be end of list.
item.next = null
# If list empty, simply set head.
if list.head == null:
list.head = item
return
# Find last element in list:
curr = list.head
while curr.next != null:
curr = curr.next
# Now have last, just attach new item to it.
curr.next = item
Превратив это в C, я оставлю это упражнение для читателя. Вы должны делать по крайней мере некоторые вашей домашней работы: -)
(a) Если вам интересно, как это сделать, см. Ниже:
def push_back(list, item):
# Force tail constraints, new tail must be end of list.
item.next = null
# If list empty, simply set head/tail.
if list.head == null:
list.head = item
list.tail = item
return
# In non-empty list, tail will always be last element.
curr.tail.next = item # Point current tail to new tail.
curr.tail = item # Update tail