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 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100