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



我已经为这个项目工作了一天多了,我真的很困惑。我祈祷有人帮我解决这个问题。我的函数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.
     }

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

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;
}

最新更新