链表相干

链表相关
下面是链表的数据结构定义
typedef structNodeType
{
  char elem;
  NodeType*next;
}SNode, *LinkList;

我的问题是这里SNode和*LinkList有什么区别?
比如SNode *p 和 LinkList p的效果一样吗?

还有就是能否把两个倒下位置成
typedef structNodeType
{
  char elem;
  NodeType*next;
}*LinkList, Node; 这样又会有什么不同? 

------解决方案--------------------
1)z/pre指向已经插入的节点,这个节点还在队列中,供后续使用,free(z)相当于把这个节点给释放了,这段内存可以再次被malloc.所以有错.
2)删除之后当然可以被释放.