考虑一个单链表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;
}
你能告诉我它是否正确吗?
答案 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;
}