代码如下,欢迎大佬指正。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode* next;
}Node,*Link;
//将link链表分解,采用尾插法来保持原有顺序
void Func(Link& link, Link& link1, Link& link2)
{
int k = 1;//处理奇结点偶节点
//分别用p,q,r来暂存三个链表的表头,w是临时节点
Node* p = link, * q = link1, * r = link2, *w;
while (p->next != NULL)
{
w = p->next;
p->next = w->next;
w->next = NULL;
if (k % 2 == 1)
{
q->next = w;
q = q->next;
}
else
{
r->next = w;
r = r->next;
}
k++;
}
}
void Init(Link& link)
{
link = (Link)malloc(sizeof(Node));
link->next = NULL;
}
void PrintLink(Link link)
{
Node* p = link;
while (p->next !=NULL)
{
printf("%d ", p->next->data);
p = p->next;
}
}
int main()
{
//创建三个链表,link是原链表,link1保存奇结点,link2保存偶节点
Link link, link1, link2;
Init(link);
Init(link1);
Init(link2);
Node* p = link, * s;
int x;
scanf("%d", &x);
//创建链表
while (x<9999)//若输入大于等9999的值,就退出循环
{
s = (Node*)malloc(sizeof(Node));
s->data = x;
p->next = s;
p = s;
scanf("%d", &x);
}
p->next = NULL;
Func(link, link1, link2);
free(link);//此时link只剩下头结点了
PrintLink(link1);
printf("\n");
PrintLink(link2);
return 0;
}