注册 登录
编程论坛 数据结构与算法

单链表的问题

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