数据结构:链表应用:第6关:链表的分解

任务描述

本关任务:利用单链表A表示一个非零整数序列,把A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点。要求空间复杂度为O(1),链表B和C均利用链表A的结点空间。

编程要求

输入

多组数据,每组数据有两行,第一行为链表A的长度n,第二行为链表A的n个元素(元素之间用空格分隔)。当n=0时输入结束。

输出

对于每组数据分别输出两行,分别对应链表B和C的元素,每个数据之间用空格分隔。

测试说明

平台会对你编写的代码进行测试:

测试输入: 7 3 -6 1 -2 4 -3 8 8 2 5 3 -1 -2 2 6 -1 0

预期输出: -6 -2 -3 3 1 4 8 -1 -2 -1 2 5 3 2 6

来源

BJFUOJ


开始你的任务吧,祝你成功!

#include 
using namespace std;
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;
void CreateList_R(LinkList &L,int n)
{//后插法创建单链表
    L=new LNode;
    L->next=NULL;
    LinkList r=L;
    for(int i=0;i>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}
void PrintList(LinkList &L)
{//打印依次输出链表中的数据
    L=L->next;
    while(L){
        if(L->next!=NULL) cout<data<<" ";
        else cout<data;
        L=L->next;
    }
    cout<next=NULL;
  LC=new LNode;LC->next=NULL;
  LinkList pa,pb,pc;
  pa=LA->next;
  pb=LB;
  pc=LC;
  while(pa)//LA不为空时,循环继续
  {
      //断正负
      if(pa->data>0)
      {
          //连结点
          pc->next=pa;
          pc=pc->next;
          pa=pa->next;
          pc->next=NULL;/******把LA原来接着的,后面的结点断掉******/
      }
      else
      {
          pb->next=pa;
          pb=pb->next;
          pa=pa->next;
          pb->next=NULL;
      }
  }


  
    /**************end************/
}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0) break;
        LinkList LA,LB,LC;
        CreateList_R(LA,n);
        Decompose(LA,LB,LC);
        PrintList(LB);
        PrintList(LC);
    }
    return 0;
}

你可能感兴趣的:(数据结构,数据结构,链表,c++)