1

我的代码编译正确,但是当我执行时, 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++;

        }
}
4

1 回答 1

1

看起来您正在将第一个节点设置为它自己的邻居。请注意,您正在使用指针,它们不一定复制底层对象。

    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循环中,所以您将永远循环通过这个节点,直到您退出程序。

于 2013-05-03T01:31:02.140 回答