在c中将值插入链接列表的中间

时间:2018-02-21 01:08:44

标签: c list linked-list

Picture of Text

在这张图片中,我必须编写一个程序,每次读取字母i时,它都会将值插入到链表中。如果它到达有两个数字的行i 23 42,它会在42之后输入23到链接列表中。

因此,如果我将链接列表打印到txt文件的第3行,它应该打印23, 78, 900。当它到达第四行时,它应该打印23, 42, 78, 900

我不确定如何让程序识别出行中有两个值,而不是一个能够在第一个值之后输入第二个值到链表中。

编辑**

struct node * addToList(struct node *base, int data)
{
  struct node *newNode = NULL;

  if (base == NULL)
    {
      base = malloc( sizeof(struct node));
      // malloc defend
      base->data = data;
      base->next = NULL;
      return base;
    }

  while (base->next != NULL)
    {
      base = base->next;
    }
  //Now at the end of the list
  newNode = malloc( sizeof(struct node)); 
  //Defend against bad malloc
  base->next = newNode; 
  newNode->data = data; 
  newNode->next = NULL;
  return base;

'下一部分是主要的'

    while (fscanf(ifp, "%s", inBuf) != EOF)
        {
          fprintf(stdout, "%s\n", inBuf);
          data = atoi(inBuf);


          if (NULL == root) 
        {
          root = addToList(root, data);
        }
          else
        { 
          temp = addToList(root, data);
          if (NULL == temp)
            {
              printf("Failed to add - good bye\n");
              return -1;
            }
        }

我正在尝试创建一个新函数来处理插入

1 个答案:

答案 0 :(得分:1)

继续使用"%s"" %c"来阅读命令。请注意%c之前有一个空格:这是在读取字符之前消耗换行符(尝试没有空格,看看会发生什么)。

当您阅读fd时,请发出另一个scanf("%d", ...)以获取该号码。

对于i,您只需发出scanf("%d%d", ...),然后检查其返回值即可。如果是1,则只读取一个数字。如果是2,则有两个整数。

在尝试阅读下一个命令时,不要忘记检查EOF