1.最后一条记录当然不能过out函数这句:while p^.next<>lalb do
  所以输出不了,你这样的结构应该单独处理首记录或尾记录。
2.Visit函数里的第一个定位循环错,也不能处理最后一条记录
  指针概念比较乱,两个new()都没有用。
  排序一段大概是这样
  if p=dh then
      exit
  else
  while p->pre^.freq>p->freq do
  begin
      p->pre->next:=p->next;
      p->next->pre:=p->pre;
      p->pre:=p->pre->pre;
      p->next:=p->pre->next;
      if p->next=dh then
      begin
          dh:=p;
          break;
      end;
  end;
  细节再调试一下。