一道链表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分。
展开
 我来答
bloodelf02
2009-10-06 · TA获得超过1657个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:488万
展开全部
链表节点就是一个值加指向下一个值的指针构成的(双向链表多一个指向上一节点的指针)。

完整的程序如下(可以正确输出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值
chentianma
2009-10-06
知道答主
回答量:23
采纳率:0%
帮助的人:21.2万
展开全部
分太少了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式