创建包含具有特定显示顺序的其他列表的元素的列表

时间:2015-01-25 23:48:31

标签: algorithm linked-list

考虑一个单链表L,其中每个元素都是一个带有两个字段的结构,一个整数num和一个指针next到列表的下一个元素。

描述一种算法,该算法将指向列表L的第一个元素的指针作为参数,并创建一个新列表L'它将包含按以下方式排序的L的所有元素:

字段L为奇数的num元素必须出现在L'在字段num为偶数的所有元素之前。字段num上具有奇数的元素应保持L'在初始列表L处的显示顺序。

对于在num字段中具有偶数的元素,也应如此。

例如,如果初始列表为L=13->15->20->17->24->26->9->30->53->44,则最终列表应为L'=13->15->17->9->53->20->24->26->50->44

这就是我的尝试:

struct node{
    int num;
    struct node next;
 }Node;

List(L){
  if (L==NULL) return;
  Node *p=NULL, *q=L, *l=L, *L3=NULL, *head2=NULL, *tail1=NULL, *tail2=NULL;
  while (q!=NULL){
        if (q-> num mod 2==1){
            if (p==NULL){
               p->num=q->num;
               L3=p;
            }
            else {
               p=p->next;
               p->num=q->num;
           }
        }
        q=q->next;
  }
  tail=p;
  while (l!=NULL){
        if (l-> num mod 2==0){
           if (l==NULL){
               l->num=q->num;
               head2=l;
            }
            else {
               l=l->next;
               l->num=q->num;
           }
        }
  }
  tail2=q;
  tail1->next=head2;
  tail1=tail2;
  return L3;
  }

你能告诉我它是否正确吗?

1 个答案:

答案 0 :(得分:1)

我尝试进行一些更改,保持代码相同

struct node{
int num;
struct node next;
}node;

List(L){
    if (L==NULL) return NULL;
    node *p=NULL, *q=L, *l=L, *newhead=NULL;
    while (q!=NULL){
        if (q-> num % 2==1){
              if (p==NULL){
                  p=(node *)malloc(sizeof(node));
                  p->num=q->num;
                  p->next=NULL;
                  newhead=p;
              }
              else {
                 node * tmp;
                 tmp=(node *)malloc(sizeof(node));
                 tmp->num=q->num;
                 tmp->next=NULL;
                 p->next=tmp;
                 p=tmp;

             }
      }
    q=q->next;
  }
  while (l!=NULL){
        if (l-> num % 2==0){
               if (p==NULL){
                  p=(node *)malloc(sizeof(node));
                  p->num=q->num;
                  p->next=NULL;
                  newhead=p;
               }
               else {
                  node * tmp;
                  tmp=(node *)malloc(sizeof(node));
                  tmp->num=q->num;
                  tmp->next=NULL;
                  p->next=tmp;
                  p=tmp;

            }
       }
       l=l->next;
 }

 return newhead;
 }