关于将字符串插入链表非常困惑

时间:2012-07-14 19:27:57

标签: c string linked-list

我已经在这个项目上工作了一天以上,我真的很困惑。我祈祷有人帮助解决这个问题。我在使用函数insertItemList时遇到问题。我不知道如何将测试文件中的String放入linked list。这是一个功课。这个项目比这个要大得多,但我把它简化为我需要帮助的东西。有人知道我做错了吗?

List.h

       #ifndef _list_h
       #define _list_h

      /*
      * Defines a single list item.
      */

      typedef char *ListItemT;

      /*
      * Defines ListP to be a POINTER to a list struct.
      * (Define the list struct in the (.c) file.
      */

      typedef struct ListT *ListP;

      /*
      * Returns a pointer to a new empty list.
      * You may implement this list as a singly or doubly
      * linked list.
      */

      ListP newList();

      /*
      * Creates a new node, inserts the item into the
      * new node and inserts the new node into the list
      * after the current node.
      * Current in then moved to the newly inserted node.
      * NOTE: Impossible to insert at head of list.
      */

      void insertItemList(ListP, ListItemT);

      #endif

List.c

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include "List.h"


      struct ListT
      { 
         char INFO[20]; 
         struct ListT *Next; 
      }*Head;



      /*
      * Returns a pointer to a new empty list.
      * You may implement this list as a singly or doubly
      * linked list.
      */

      ListP newList()

      {
      // allocate memory for new list 

      struct ListT *newnode = malloc(sizeof(struct ListT));

      return newnode; 
      }

      /*
      * Creates a new node, inserts the item into the
      * new node and inserts the new node into the list
      * after the current node.
      * Current in then moved to the newly inserted node.
      * NOTE: Impossible to insert at head of list.
      */

      //where I'm having trouble

     void insertItemList(ListP LOC, ListItemT DATA)

     {
     struct ListT *temp;

     temp=(struct ListT *)malloc(sizeof(struct ListT)); 

     strcpy(temp->INFO, DATA);
     }

ListTest.c

     #include <stdio.h>
     #include <string.h>
     #include "List.h"

     int main()
     {
     // Create two lists
     ListP list1 = newList();
     ListP list2 = newList();
     printf("\nList Creation Successful!\n");

     // Insert one name into the first list
     insertItemList( list1, "Alice" ); //Ive never seen a parameter like this before.
     }

2 个答案:

答案 0 :(得分:0)

您的代码中似乎没有任何内容可以设置列表节点的Next字段。

答案 1 :(得分:0)

List.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "List.h"

struct ListT { struct ListNodeT *head, *current; };
struct ListNodeT
{ 
    char INFO[20]; 
    struct ListNodeT *Next; 
};

/*
* Returns a pointer to a new empty list.
* You may implement this list as a singly or doubly
* linked list.
*/
ListP newList()
{
    // allocate memory for new list 
    struct ListT *newlist = malloc(sizeof(struct ListT));
    if (newlist) newlist->head = newlist->current = NULL;
    return newlist; 
}

/*
* Creates a new node, inserts the item into the
* new node and inserts the new node into the list
* after the current node.
* Current is then moved to the newly inserted node.
* NOTE: Impossible to insert at head of list.
*/
void insertItemList(ListP LOC, ListItemT DATA)
{
    struct ListNodeT *temp = malloc(sizeof(struct ListNodeT)); 
    if (!temp) abort();
    strncpy(temp->INFO, DATA, sizeof temp->INFO);
    if (LOC->current)
        temp->Next = LOC->current->Next,
        LOC->current->Next = temp;
    else
        temp->Next = NULL,
        LOC->head = temp;
    LOC->current = temp;
}