while(!p->next){
  n = p->next;
  f = strcmp(n->word,word);
  if(f == 0){   /* 等しい */
    m = makeNewItem();
    strcpy(m->word,word);
    m->next = n;
    p->next = m;
    break;
  }
  elseif(f>0){   /* wordのが小さい */
    m = makeNewItem();
    strcpy(m->word,word);
    m->next = n;
    p->next = m;
    break;
  }
  elseif(f<0){   /* wordのが大きい */
    if(n->next == NULL){
      m = makeNewItem();
      strcpy(m->word,word);
      m->next = NULL;
      n->next = m;
      break;
    }
    p=p->next;
  }
}

struct data* makeNewItem(void)
{
  return (struct data*)(malloc(sizeof(struct data)));
}

リスと入れ替え部分のみだが、こんなんかな?