#if 1 #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int data; Node *next; }; //初始化 Node *init() { Node *head=new Node; head->next=NULL; return head; } //头插法创建节点 void insetList(Node *head,int i) { Node *cur=new Node; cur->data=i; cur->next=head->next; head->next=cur; } //链表A,B生成 void CreateList(Node *head_A) { for(int i=-8;i<10;i++) { insetList(head_A,++i); } } //打印链表 void print(Node *head) { Node *temp=head->next; //防止头指针移动 while(temp) { cout<<temp->data<<" "; temp=temp->next; } } //拆分链表A,链表C源于A。生成链表B void SplitList(Node *head_A,Node *List_C,Node *List_B) { Node *pa=head_A->next; //pa指向链表A的首元节点 Node *pc=List_C; //pc指向C的头节点,为移动指针是为了保持头指针不变 Node *pb=List_B; //链表head_B头指针给pb,pb为移动指针是为了保持头指针不变 while(pa) //A链表遍历结束即退出 { if(pa->data < 0) { pc->next=pa; //先存A链表的节点 pc=pa; //pc指向pa,pc前进一个节点 } //尾插法创建B链表 else { Node *cur=new Node; //生成B链表节点 cur->data=pa->data; //将A表大于0的数据存入链表B中 pb->next=cur; //pb指向新生成的节点 cur->next=NULL; //将新节点指针域置空 pb=cur; //pb移动至新节点位置 } pa=pa->next; //pa向A链表下一节点移动 } } void main() { Node *head_A=init(); //链表A初始化头节点 Node *List_B=init(); //链表B初始化头节点 //链表C初始化,结构体指针记得初始化头节点 Node *List_C=head_A; // //创建链表A CreateList(head_A); //打印链表A cout<<"链表A为:"<<endl; print(head_A); cout<<endl; //调用函数分拆链表A SplitList(head_A,List_C,List_B); //打印链表C cout<<endl<<"链表List_C为:"<<endl; print(List_C); //打印链表B cout<<endl<<"链表List_B为:"<<endl; print(List_B); cout<<endl; system("pause"); } #endif