zoukankan      html  css  js  c++  java
  • c语言——单链表分拆——头插法创建链表,尾插法生成链表

    #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
    

      

  • 相关阅读:
    【译文】不是所有的 bug 都值得修复的
    11月第5周业务风控关注|重磅!瓜子二手车“遥遥领先”被罚天价1250万
    AutoCAD .NET二次开发(四)
    AutoCAD .NET二次开发(三)
    ArcGIS10.2下调试10.1的程序
    再遇1402,注册表权限问题
    ArcGIS Add-in——自动保存编辑
    只打开一个子窗体
    获取编辑器两种方法
    Adobe Acrobat Pro 11安装激活
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/10536545.html
Copyright © 2011-2022 走看看