zoukankan      html  css  js  c++  java
  • 判断两个链表是否相交

    方法:获得两个链表的长度,获得长度的差值len,然后首先遍历较长的链表len次,然后再同时遍历两个链表,如果有相同部分,两个链表就相交,如果没有,则不相交,即没有公共部分。

    代码:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    typedef struct list{
         int data;
         struct list *next;
    }*listNode;
    void initList(listNode &list)                     //初始化程序
    {
         list=(struct list*)malloc(sizeof(struct list));
         list->data=0;
         list->next=NULL;
    }
    
    void createList(listNode &list,int a[],int n)        //创建链表
    {
        listNode head,node;
        head=list;
        for(int i=0;i<n;i++)
          {
             node=(struct list*)malloc(sizeof(struct list));
             node->data=a[i];
             node->next=NULL;
             head->next=node;
             head=node;
          }
        
    }
    void judgeInter(listNode list,listNode list1)           //判断两个链表是否相交
    {
        int len1=0,len2=0;
        listNode head,head1;
        head=list->next;
        //获得两个链表的长度
        while(head)
        {
           len1++;
           head=head->next;
        }
        head=list1->next;
        while(head)
        {
          len2++;
          head=head->next;
        }
        int t=len1-len2;
        head=list;
        head1=list1;
        while(t>0)
        {
           head=head->next;
           t--;
        }
        while(len2>0)    //判断有没有相同的部分
        {
          head=head->next;
          head1=head1->next;
          if(head->data==head1->data)
           {
               cout<<"the two list have the same part:"<<" "<<head->data<<endl;
               break;
           }
          len2--;
        }
        if(len2<=0)
           cout<<"the two list dont have the same list"<<endl;
    }
    void playList(listNode list)      //输出单链表
    {
        listNode head;
        head=list->next;
        if(head==NULL)
           cout<<"the list is null"<<endl;
        while(head)
         {
           cout<<head->data<<"--";
           head=head->next;
         }
       cout<<endl; 
    }
    
    int main()
    {
        listNode list,list1;
        int a[10]={1,2,3,4,5,6,7,8,9,0};
        int b[8]={12,13,16,17,11,8,9,0};
        initList(list);
        initList(list1);
        cout<<"create the list:"<<endl;
        createList(list,a,10);
        createList(list1,b,8);
        cout<<"output the list:"<<endl;
        playList(list);
        playList(list1);
        cout<<endl;
        judgeInter(list,list1);
        cout<<endl;
        return 0;
    }
    

    运行截图:

  • 相关阅读:
    js发送请求
    GIS小知识
    oracle常见错误
    java异常Exception
    java获取文件路径
    Runnable和Thread的区别
    Hadoop shell命令
    Runtime和Process
    Linux下查看tomcat控制台输出信息
    ajax小知识
  • 原文地址:https://www.cnblogs.com/xshang/p/3511111.html
Copyright © 2011-2022 走看看