添加到链接列表帮助?仅限c语言

时间:2013-02-27 04:40:30

标签: c linked-list

所以我有这个链表并且它有效但只有你在列表中添加一个项目。这是我的代码:

    struct node{
       char key[10];
       char content[20];
       struct node *next;
    };
    struct node *head=(struct node *) NULL;
    struct node *tail=(struct node *) NULL;

    struct node * initinode(char *key, char *content)
    {
     struct node *ptr;
     ptr = (struct node *) malloc(sizeof(struct node ) );
      if( ptr == NULL )                       
         return (struct node *) NULL;        
      else {                                  
         strcpy( ptr->key, key );          
         strcpy(ptr->content,content);                       
           return ptr;                         
           }
     }
    void printnode( struct node *ptr )
    {
      printf("Key ->%s\n", ptr->key );
      printf("Contents   ->%d\n", ptr->content );
     }
    void printlist( struct node *ptr )
      {
         while( ptr != NULL )           
         {
           printnode( ptr );          
           ptr = ptr->next;            
         }
     }
    void add( struct node *new )  
    {
       if( head == NULL ) {     
         head = new;
         tail=new; 
       }                   
       else {
         tail->next = new;        
         tail->next=NULL;              

            }
    }

因此,当我尝试将三个项目添加到列表并打印时,它将仅显示第一个项目,如下所示:

     struct node *ptr;
    char *terminal="term";
        char *term;
        term=getenv("TERM");  
      ptr=initinode(terminal, term);
          add(ptr);
     //-----------------------
      char ccterm[20];
      char *ret, tty[40];
      char *currTerminal="tty";
     if ((ret = ttyname(STDIN_FILENO)) == NULL)
               perror("ttyname() error");
     else {
        strcpy(tty, ret); 
          }
      ptr=initinode(currTerminal, tty);
      add(ptr);

    //----------------------------------
     char cwd[1024];
     char *st="date";
     time_t t;
     char ti[30];
     time(&t);
     char date;
     date=t;
     sprintf(ti,"%s", ctime(&t));
     ptr=initinode(st, ti);
     add(ptr);
     printlist(ptr);

这将我带到最后一个问题,当我将任何这些添加到列表中时它只输出int值,那么我将如何在列表中打印出字符串值。我已经尝试将我的代码修改为男性内容一个字符串,但它永远不会成功。非常感谢任何建议,谢谢

3 个答案:

答案 0 :(得分:2)

在你的添加功能中,你有这个:

tail->next = new;        
tail->next=NULL;

什么时候应该

tail->next = new;
tail = new;
tail->next=NULL;

另一个问题是printnode。在打印出内容时,您应该使用%s作为字符串。 %d用于整数。

答案 1 :(得分:0)

要打印字符串,您需要修复printnode功能。

printf("Contents   ->%s\n", ptr->content );
                      ^

它会打印int值,因为您会专门(%d)要求打印int值。

贾斯汀用你的添加功能解决了另一个问题。

答案 2 :(得分:0)

  1. 不要投放malloc()NULL等。

  2. 程序中的问题:

    tail->next = new; //I am new list
    tail->next=NULL; //I am nobody!

  3. 你可能意味着:

    tail->next = new;
    tail->next->next = NULL;
    tail = tail->next;