user-0 提问: 求解数据结构一道题，链表问题！！

回复:
user: user-1
content: 引用 7 楼 Starbucks_star 的回复:while(r->next!=p)             {                 if(r->fieq<p->fieq)                 {                     s->next=p;                     p->next=r;                    return ;                 }                 s=s->next;                 r=r->next;             }  谢谢哈，你修改的真不错！学到了很多。但还有一点不懂那个return在哪里有什么意思？？？？ 结点插入好了，这个函数此次使命就完成了，用return结束函数的执行，返回到主函数。

user: user-1
content: #include<stdio.h>  #include<malloc.h>  typedef struct LNode  {      int data;  //数据     int fieq;    //频率     struct LNode *next; //next指针 }*Linklist ;    void Creat(Linklist &L)  {      L=(Linklist)malloc(sizeof(LNode));      if(!L)          exit(0);      else          L->next=NULL;      printf("构建成功！\n");  }   void FindLNode(Linklist &L,int x)  {      Linklist p,q;      p=L->next;      q=L; //你的写法和你的要求不相符啊，频率高的在前，应该从前往后比呀      while(p!=NULL)      {          if(p->data==x)          {               p->fieq++;              q->next=p->next;  //取出该节点              Linklist r,s;              r=L->next;              s=L;              while(r->next!=p)              {                  //重新插入                 if(r->fieq<p->fieq)                  {                      s->next=p;                      p->next=r; return;                  }                  s=s->next;                  r=r->next;              }           }              q=q->next;              p=p->next;          }          if(p==NULL)          {              Linklist s=(Linklist)malloc(sizeof(LNode));//没初始化就用，运行竟然没崩溃？              s->data=x;              s->fieq=0;              s->next=NULL;                            if(L->next==NULL)              {                  L->next=s;                  s->next=NULL;              } //新加的，不然新结点怎么添加 else { q->next=s; s->next=NULL;     }          }       }       void print(Linklist L)      {          Linklist p=L->next;          while(p!=NULL)          {              printf("[%d 出现 %d次]\n",p->data,p->fieq);              p=p->next;          }       }      int main()      {          Linklist a;          printf("构建一个新链表：");          Creat(a);          FindLNode(a,5);          FindLNode(a,1);          FindLNode(a,2);          FindLNode(a,5);          FindLNode(a,3);          FindLNode(a,4);          FindLNode(a,4);          FindLNode(a,3);          FindLNode(a,3);          print(a);          getchar();          return 0;      }

user: user-1
content: 看错了，收回刚才的话......

user: user-1
content: if(p==NULL)          {              Linklist s;              s->data=x;              s->fieq=0;              s->next=NULL;              if(L->next==NULL)              {                  L->next=s;                  s->next=NULL;              }           }   这段代码，如果p为空，就新建一个结点，然后把L指向它，L作为头结点，每次都指向新建结点，而新建的结点又指向NULL,那你怎么保存原有的结点呢。

user: user-2
content: Creat(a) 只是创建一个链表节点，并不是链表

user: user-0
content: 亲们，没人理我吗？

user: user-3
content: 仅供参考 http://pan.baidu.com/s/17yIcQ

user: user-4
content: 引用 7 楼 Starbucks_star 的回复:while(r->next!=p)             {                 if(r->fieq<p->fieq)                 {                     s->next=p;                     p->next=r;                    return ;                 }                 s=s->next;                 r=r->next;             }  谢谢哈，你修改的真不错！学到了很多。但还有一点不懂那个return在哪里有什么意思？？？？直接函数返回，结束函数调用，相当于后面的代码都直接跳过

user: user-0
content: while(r->next!=p)             {                 if(r->fieq<p->fieq)                 {                     s->next=p;                     p->next=r;                    return ;                 }                 s=s->next;                 r=r->next;             }  谢谢哈，你修改的真不错！学到了很多。但还有一点不懂那个return在哪里有什么意思？？？？

user: user-0
content: 要求还有，左移频率高的节点，频率降序排列节点！！！