本帖最后由 muminsanhao 于 2011-05-23 17:24:41 编辑

解决方案 »

  1.   

    void reverse_link(PLinkList linklist)
    {
     if (!linklist) //判断链表是否为空;
     {
      return ;
     }
     PLinkList p,q;  //定义两个链表结点;
     p=linklist->Next; //将p节点执行linklist的下一个结点;
     linklist->Next=NULL; //然后将linklist的下一个结点置为NULL;
     while(p)     //判断每个结点是否为空;
     {
      q=p;   //如果该结点不为空,则将该节点赋值给p结点;
      p=p->Next;  //p结点指向下一个结点;
      q->Next=linklist->Next; //将linklist的下一个结点赋值q指向的下一个结点;
      linklist->Next=q;//linklist的下一个结点结点指向q结点;  //上面这几步相当于向q结点中插入一个新结点;
     }}
      

  2.   

    linklist应该是表头,不包含节点信息
      

  3.   

    首先谢谢你的回答,有些地方还是不大懂.
    linklist->Next=NULL; 为什么将节点置为空值啊?
    返回的是linklist,应该是像linklist插入节点啊,你说是像q插入节点,q与linklist是什么关系啊?
      

  4.   

    画个流程示意图就明白了,和刚学双链表一样。无非是三个节点,prev cur next。分别置换
      

  5.   

    如果说实质那它是表头,但是对于使用者来说不正是整个表吗,所以只要你写程序的时候知道这点就可以了~
    (修改链表类自己的时候知道它实质是个表头,外部代码使用的时候就看做整个表).linklist->Next=NULL; 其实是为了让链表即时没执行过while循环都是有效的(此时代表空链表),
    继而说,不管你这个reverse_link函数怎么个执行法,你都要保证链表的最后一个结点的下个节点指向NULL,它是判断链表结束的唯一凭证(除非你特殊处理,比如价格count统计节点个数等等).