一道链表c语言题,求救!!!
fun函数从h指向的链表第二个结点开始遍历所有结点,当遇到x值为奇数的结点时,将该结点移到h链表第一个结点之前,函数返回链表首结点地址。print函数输出p指向的链表中所...
fun函数从h指向的链表第二个结点开始遍历所有结点,当遇到x值为奇数的结点时,将
该结点移到h链表第一个结点之前,函数返回链表首结点地址。print函数输出p指向的链表
中所有结点的x值。程序运行后的输出结果是"1 3 4 2"。
#include<stdio.h>
#define N 4
struct node
{ int x;
struct node *next;
};
void print(stmct node *p)
{ while_____(27)________
{printf("%4d", _________(28)_______);P=P->next;}
prinff("\n");
}
struct node *fun(struct node *h)
{ struct node *pl,*p2,*p3;
pl=h;p2=pl->next;
while(p2)
{ if(p2->x%2)
{p3=p2;
pl->next=______p2->next______ ;
p2=pl->next:
p3->next=h;
____h=p3_________;
}
else
{pl=p2:p2=p2->next;}
}
retnm h;
}
main()
{struct node a[N]={{4},{3},{2},{1}},*head=a;int i,num;
for(i=0;i<N-1;i++) a[i].next=&a[i+1];
a[i].next=0;
head=fun(head);print(head);
}
链表块学地很糟糕,希望能给点详细地解答,小弟先谢谢了。
答案如果很好,我可以再加30分。 展开
该结点移到h链表第一个结点之前,函数返回链表首结点地址。print函数输出p指向的链表
中所有结点的x值。程序运行后的输出结果是"1 3 4 2"。
#include<stdio.h>
#define N 4
struct node
{ int x;
struct node *next;
};
void print(stmct node *p)
{ while_____(27)________
{printf("%4d", _________(28)_______);P=P->next;}
prinff("\n");
}
struct node *fun(struct node *h)
{ struct node *pl,*p2,*p3;
pl=h;p2=pl->next;
while(p2)
{ if(p2->x%2)
{p3=p2;
pl->next=______p2->next______ ;
p2=pl->next:
p3->next=h;
____h=p3_________;
}
else
{pl=p2:p2=p2->next;}
}
retnm h;
}
main()
{struct node a[N]={{4},{3},{2},{1}},*head=a;int i,num;
for(i=0;i<N-1;i++) a[i].next=&a[i+1];
a[i].next=0;
head=fun(head);print(head);
}
链表块学地很糟糕,希望能给点详细地解答,小弟先谢谢了。
答案如果很好,我可以再加30分。 展开
2个回答
展开全部
链表节点就是一个值加指向下一个值的指针构成的(双向链表多一个指向上一节点的指针)。
完整的程序如下(可以正确输出1342)
#include<stdio.h>
#define N 4
struct node
{
int x;
struct node *next;
};
void print(struct node *p)
{
while(p != 0)
{
printf("%4d", p->x);
p = p->next;
}
printf("\n");
}
struct node *fun(struct node *h)
{
struct node *p1,*p2,*p3;
p1 = h;
p2 = p1->next;
while(p2)
{
if(p2->x%2)
{
p3 = p2;
p1->next = p2->next;
p2 = p1->next;
p3->next = h;
h=p3;
}
else
{
p1 = p2; p2 = p2->next;
}
}
return h;
}
main()
{
struct node a[N] = {{4},{3},{2},{1}},*head = a;
int i,num;
for(i = 0;i < N-1;i++) a[i].next = &a[i+1];
a[i].next=0;
head = fun(head);
print(head);
}
我发现你中间2空涉及链表节点移动的你都填了并且是正确的啊, 你应该是懂的哈。
前面2个空其实很简单,27 判断是否为有效节点,即指针是否为空; 28 输出 节点的x值
完整的程序如下(可以正确输出1342)
#include<stdio.h>
#define N 4
struct node
{
int x;
struct node *next;
};
void print(struct node *p)
{
while(p != 0)
{
printf("%4d", p->x);
p = p->next;
}
printf("\n");
}
struct node *fun(struct node *h)
{
struct node *p1,*p2,*p3;
p1 = h;
p2 = p1->next;
while(p2)
{
if(p2->x%2)
{
p3 = p2;
p1->next = p2->next;
p2 = p1->next;
p3->next = h;
h=p3;
}
else
{
p1 = p2; p2 = p2->next;
}
}
return h;
}
main()
{
struct node a[N] = {{4},{3},{2},{1}},*head = a;
int i,num;
for(i = 0;i < N-1;i++) a[i].next = &a[i+1];
a[i].next=0;
head = fun(head);
print(head);
}
我发现你中间2空涉及链表节点移动的你都填了并且是正确的啊, 你应该是懂的哈。
前面2个空其实很简单,27 判断是否为有效节点,即指针是否为空; 28 输出 节点的x值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询