Algorithm 创建包含具有特定显示顺序的其他列表元素的列表
考虑一个单链接列表L,其中每个元素都是一个包含两个字段的结构,一个整数Algorithm 创建包含具有特定显示顺序的其他列表元素的列表,algorithm,linked-list,Algorithm,Linked List,考虑一个单链接列表L,其中每个元素都是一个包含两个字段的结构,一个整数num,一个指向列表下一个元素的指针next 描述一种算法,该算法获取指向列表L的第一个元素的指针作为参数,并创建一个新的列表L',该列表L'将包含按以下方式排序的L的所有元素: 对于字段num为奇数的L元素,必须在字段num为偶数的所有元素之前出现在L'中。字段num中带有奇数的元素应保留在L'中,它们在初始列表L中的显示顺序 对于字段num中具有偶数的元素,也应如此 例如,如果初始列表是L=13->15->20->17->
num
,一个指向列表下一个元素的指针next
描述一种算法,该算法获取指向列表L的第一个元素的指针作为参数,并创建一个新的列表L',该列表L'将包含按以下方式排序的L的所有元素:
对于字段num
为奇数的L
元素,必须在字段num
为偶数的所有元素之前出现在L'中。字段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;
}
你能告诉我这是不是正确吗?我试着做了一些改动,保持你的代码不变
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;
}
如果我没有弄错的话,代码是c/c++的,但是在分配num值之前,您没有使用分配给指针的内存?@sasha它只是一个伪代码,但它类似于c。。。我编辑了我的帖子。。。我还需要修改其他东西吗?我看到的第一个错误是,第一个while循环永远运行。你还没有完成q=q->nextI试图编写一个完整的代码,这样就不会有任何混淆,希望它能有所帮助:)另外,为了将来的参考,请发布一个完整的代码,其中包含解释变量名和注释,以解释你在做什么,可以吗解释为什么newhead在函数末尾返回整个新列表@萨沙