tina竹 2018-10-14 11:19 采纳率: 0%
浏览 584
已采纳

请问为什么数据域为2的结点最后输出的是指针?

#include
#include

typedef int DataType; //定义单链表的数据类型为整型
struct Node {
DataType data; //数据域
struct Node* next; //指针域
};
typedef struct Node *PNode; //定义指向结构体的PNode类型
typedef struct Node *LinkList; //定义链表类型

LinkList CreateList_Tail_loop( )// 尾插法建立单循环链表
{
LinkList head=(LinkList)malloc(sizeof(struct Node));
PNode cur=NULL;
PNode tail=head;
DataType data;
scanf("%d",&data);
while(data != -1)
{ //分配空间,赋值
cur=(struct Node*)malloc(sizeof(struct Node));
cur->data=data;
tail->next=cur;
tail = cur;
scanf("%d",&data);
}
tail->next=head;
return tail;
}

void print(LinkList tail) //输出单链表
{
PNode head=tail->next;
PNode p=head->next;
while(p!=head)
{
printf("%d\n", p->data);
p=p->next;
}
}

void DestoryList_Link(LinkList tail)//释放单链表
{
PNode pre = tail;
PNode p = tail->next;
while (p!=tail)
{
free(p);
p = p->next;
}
free(tail);
}

void Move_Odd_Even(LinkList tail)
{
PNode head=tail->next;
PNode p,q,m;
PNode pre;
p=head->next;
pre=head;
while(p->data%2!=0)
{
pre=p;
p=p->next;
}
m=p;
q=p;
p=p->next;
pre->next=q->next;
tail->next=q;
q->next=head;
tail=q;
while(p!=m)
{
if(p->data%2==0)
{
q=p;
p=p->next;
pre->next=q->next;
tail->next=q;
q->next=head;
tail=q;
continue;
}
pre=p;
p=p->next;
}
}

int main()
{
LinkList tail=NULL;
tail=CreateList_Tail_loop();
Move_Odd_Even(tail);
print(tail);
DestoryList_Link(tail);
return 0;
}

  • 写回答

1条回答

  • threenewbee 2018-10-14 12:02
    关注

    Move_Odd_Even 算法不对,具体不看了,你可以参考:
    https://blog.csdn.net/u010817474/article/details/48498139

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题