C链接列表添加节点结束

时间:2013-04-01 01:41:04

标签: c pointers insert linked-list

我正在尝试创建一个可以向链表添加信息的程序。似乎一旦我添加了超过2个节点,之前添加的节点就会被覆盖。在做这项工作时,我有什么遗漏的东西吗?

我从这个函数开始,它可以添加到列表的前面,或者如果已经在前面添加了一个节点,则调用函数addToBack

ListHeadPtr Front(ListHeadPtr theList, list * toBeAdded){

  printf("Received in addToFront\n");

  if(theList == NULL){
    theList = toBeAdded;
    return(theList);
  }

  else{
    theList = addToBack(theList,toBeAdded);
    /*toBeAdded->next = theList;
    theList = toBeAdded;*/
    return (theList);
  }

}

  ListHeadPtr back(ListHeadPtr theList, item * toBeAdded){

  if(theList == NULL){
    theList = addToFront(theList,toBeAdded);
    return(theList);
  }

  else{
    list *current;
    current = theList;
    while (current->next!=NULL){
      current = current->next;
    }
    current->next = toBeAdded;
    return(current);
  }

}

项目(toBeAdded由此函数定义

item *createItem(int time){

  item *itemPtr = (list *) malloc(sizeof(item));

  if(NULL == itemPtr)
    {
        printf("Unable to create item\n");
        return (NULL);
    }

  itemPtr->waitTime = time;
  itemPtr->next = NULL;

  return (itemPtr);
}

1 个答案:

答案 0 :(得分:3)

在[addTo]后退功能

return(current);

应该返回列表的头部。你正在做的是将列表截断为最后两个元素。

避免此类错误的一种方法是精确地使用您的语义。什么是addToBack定义返回?调用者希望它返回列表,并添加节点。在函数之前应该有一个文档注释,说明它的作用和返回的内容。该注释可以指导您编写代码...如果最后只有一个语句返回列表而不是几个返回,则代码会更好。然后这个bug就不会发生了。