创建包含具有特定显示顺序的其他列表元素的列表
Create list that contains elements of an other list with a specific display order
考虑一个单链表 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;
}
你能告诉我是否正确吗?
我尝试进行一些更改以保持您的代码不变
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;
}
考虑一个单链表 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;
}
你能告诉我是否正确吗?
我尝试进行一些更改以保持您的代码不变
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;
}