编程论坛
注册
登录
编程论坛
→
数据结构与算法
单链表的问题
a86819318
发布于 2010-05-06 09:30, 583 次点击
编写算法,将带头结点单链表head(结点数据域为整形)拆成一个奇数链表和一个偶数链表。要求结果链表仍使用原来链表的存储空间,不另开辟存储空间。。
2 回复
#2
2010-05-06 16:25
程序代码:
算法如下:
void
splitLinkList(Linklist head)
{
LinkList evenLinkList,oddLinkList,p,q,r,post;
p = head->next;
while
(p!=NULL)
{
post = p->next;
//
保存下一个节点位置
if
(p->data/
2
==
0
)
//
如果是偶数
{
if
(evenLinkList==NULL)
//
建立偶数链表的第一个节点
{
evenLinkList = p;
evenLinkList->next = NULL;
}
else
//
将节点插入到偶数链表
{
p->next = evenLinkList->next;
evenLinkList->next = p;
}
}
else
//
如果是奇数
{
if
(oddLinkList==NULL)
//
建立奇数链表的第一个节点
{
oddLinkList = p;
oddLinkList->next = NULL;
}
else
//
将节点插入到奇数链表
{
p->next = oddLinkList->next;
oddLinkList->next = p;
}
}
p = post;
//
游历到下一个节点
}
}
#3
2010-05-06 22:08
回复 楼主 a86819318
注意返回值,函数需要修改修改。
void LinkList_PaiXu(LinkList L)
{
LinkList q,P,Q,x,y;
q=L->next;
if(q->data%2==1)
{
P=LinkListInit();P->next=q;x=q;q=q->next;
while(q->data%2==1) { x->next=q;x=q;r=q->next; }
Q=LinkListInit();Q->next=r;y=r;
while(r)
{
if(r->data%2==1) { x->next=r;x=r;r=r->next; }
else { y->next=r;y=r;r=r->next;}
y->next=NULL;x->next=NULL;
}
}
else
{
Q=LinkListInit();Q->next=q;x=q;q=q->next;
while(q->data%2==0) { x->next=q;x=q;q=q->next; }
P=LinkListInit();P->next=q;y=q;
while(q)
{
if(q->data%2==0) { x->next=q;x=q;q=q->next; }
else { y->next=q;y=q;q=q->next;}
y->next=NULL;x->next=NULL;
}
}
free(L);
}
1