zoukankan      html  css  js  c++  java
  • c语言实现两个单链表的交叉合并

    #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,Node *head_B)
    {
    	for(int i=0;i<20;i++)
    	{
    		insetList(head_A,i);
    		i++;
    		insetList(head_B,i);
    	}
    	//增加链表B的长度
    	insetList(head_B,20);
    	insetList(head_B,25);
    }
    
    void Linklist(Node *head_A,Node *head_B,Node *List_C)
    {
    	Node *pa=head_A->next;	//pa指向链表A的首元节点
    	Node *pb=head_B->next;	//pa指向链表B的首元节点
    	Node *pc=List_C;		//pc指向C的头节点
    
    	while(pa&&pb)		//某一链表遍历结束即退出
    	{
    		pc->next=pa;	//先存A链表的节点
    		pc=pa;			//pc指向pa,pc前进一个节点
    		pa=pa->next;	//pa前进一个节点
    
    		pc->next=pb;	//存B链表的节点
    		pc=pb;			
    		pb=pb->next;
    	}
    
    	//判断谁先结束,然后把没结束的剩余结点的链接上
    	pc->next=pa?pa:pb;	
    
    	delete head_B;	//释放链表B
    }
    
    //打印链表
    void print(Node *head)
    {
    	Node *temp=head->next;	//防止头指针移动
    	while(temp)
    	{
    		cout<<temp->data<<"  ";
    		temp=temp->next;
    	}
    }
    void main()
    {
    	Node *head_A=init(); //链表A
    	Node *head_B=init(); //链表B
    	Node *List_C=head_A;	//链表C
    
    	//创建链表A,B
       CreateList(head_A,head_B);
    
       //打印链表
       cout<<"链表A为:";
       print(head_A);
       cout<<endl<<"链表B为:";
       print(head_B);
    
       //合并链表A,B生成链表C
       Linklist(head_A,head_B,List_C);
       cout<<endl<<"链表C为:"<<endl;
       print(List_C);
    
       system("pause");
    
    }
    

      总结:链表的遍历注意不要随意改变头指针的位置,进行合并时需要声明三个结构体指针用于进行合并,注意某一链表结束时需要进行链接,再释放生成的链表.

  • 相关阅读:
    <html>
    Java设计模式----策略模式
    Android之通过网络播放一首简单的音乐
    关于六度关系理论,我最终算出了自己与奥巴马的关系度数
    本地创建Duplicate数据库
    资源向导之 &quot;APUE&quot;
    WinCE 下编程须要IP地址控件咋办?
    LeetCode Anagrams My solution
    一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)
    自己定义View Layout过程
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/10530320.html
Copyright © 2011-2022 走看看