单链表例题

设有一个正整数序列组成的有序单链表(按递增有序,且允许
有相等的整数存在),请设计一个用最小的时间和最小空间的算
法实现下列功能:
(a) 确定在序列中比正整数 x 大的数有几个(相
同的数只计算一次,如序列{3、5、6、6、8、10、11、13、13、
16、17、20、20}中比 10 大的数有 5 个);
(b) 将单链表中比正整数 x 小的数按递减次序排列;
(c) 将正整数比 x 大的偶数从单链表中删除。要求:
(1)描述算法的基本设计思想;
(2)根据设计思想,采用 C 或 C++语言描述算法,给出注释;
(3)说明你所设计的算法的时间复杂度和空间复杂度

参考答案:

L为带头结点的单链表,k为所需正整数

  transform_list(LNode *L, int k)
  {
      LNode *p,*pre,*s,*r;
      int c=0,pre_data;
      p=L->next;r=p;pre_data=r->data;
      while(p!=NULL)
      {
          if(p->data<=k)
          {  s=p->next;
             p->next=L->next;
             L->next=p;
             p=s;
          }
          else
          {   if(pre_data!=p->data)
                  {
                      c=c+1;
                      pre_data=p->data;
                  }
              if(p->data%2==0)
              {   r->next=p->next;
                  free(p);
                  p=r->next;
              }
              else
              {    r->next=p;
                   r=p;p=p->next;
              }

          }
      }
      printf("the node greater than %d is %d\n",k,c);
  }

你可能感兴趣的:(算法,数据结构,排序算法)