我的代码编译正确,但当我执行时,insertLast被调用两次,然后我的程序冻结。我不明白为什么它会工作两次,但后来就冻僵了。
将节点发送到链接列表的代码:
int main ()
{
LinkedList* canQueue=createList();
for(ii = 0; ii < 10; ii++)
{
TinCan* tempCan = (TinCan*) malloc(sizeof(TinCan));
insertLast(canQueue, tempCan);
}
return 0;
}
以及我使用的链表方法:
LinkedList* createList() /*creates empty linked list*/
{
LinkedList* myList;
myList = (LinkedList*)malloc(sizeof(LinkedList));
myList->head = NULL;
return myList;
}
void insertLast(LinkedList* list, TinCan *newData)
{
int ii = 1;
LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
newNode->data = newData;
newNode->next = NULL;
if(list->head == NULL)
{
list->head = newNode;
newNode->next=NULL;
}
else
{
LinkedListNode* current = list->head;
while (current->next != NULL)
{
current = current->next;
}
current->next = newNode;
ii++;
}
}
最佳答案
看起来您正在将第一个节点设置为它自己的邻居。注意,您使用的是指针,它们不一定复制底层对象。
list->head = newNode;
newNode->next=NULL;
current = list->head;
current->next = newNode;
在开始时,head作为newnode,current作为head(current=newnode),然后current.next=newnode(newnode.next=newnode)。因为你在一个while循环中,你将永远循环这个节点直到退出程序。
关于c - 添加到链接列表时卡住(C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16350214/