“Y”型链表查找交点

/*
    一个形如"Y"的链表  求其交点
*/

#include <iostream>
#include <stack>
using namespace std;

typedef struct node{
    int value ;
    struct node *next;
}List;
/*创建链表*/
void Create(List* &Head ,List* &End,int arr[],int Count)
{
    if(Count<=0)  return ;
    int nodevalue = 0;
    List *node= NULL;
    for(int i=0;i<Count;i++){
        nodevalue = arr[i];
        node =new List;
        node->value = nodevalue;
        node->next = NULL;
        if(Head == NULL){
            Head = node;
        }
        else{
            End->next = node;
        }
        End = node;
    }
}
/*遍历链表*/
void Traval(List*  Head,List* End){
    if(Head == NULL || End == NULL)  return  ;
    List* ptr = Head;
    while(ptr != End){
        cout<<ptr->value<<" ";
        ptr= ptr->next;
    }
    cout<<endl;
}
/*查找交点*/
void FindNodeValue(List* Head_1,List* End_1,List* Head_2,List* End_2,int &Result)
{
    if(Head_1 == NULL || End_1 == NULL || Head_2 == NULL || End_2 == NULL)  return ;
    stack<List*> stack_1,stack_2;
    List* ptr = NULL;
    ptr= Head_1;
    while(ptr != End_1){
        stack_1.push(ptr);
        ptr=ptr->next;
    }
    ptr = Head_2;
    while(ptr != End_2){
        stack_2.push(ptr);
        ptr=ptr->next;
    }
    ptr = stack_1.top(); 
    stack_1.pop();
    List* ptr_1 = stack_2.top();
    stack_2.pop();
    List* re = NULL;
    while(ptr == ptr_1){
        re = ptr;
        ptr = stack_1.top(); 
        stack_1.pop();
        ptr_1 = stack_2.top();
        stack_2.pop();
    }
    Result = re->value;
}
int main(){
    int arr[] = {3,4,2,4,2,4,3,7};
    List *Head_1=NULL,*End_1=NULL,*Head_2=NULL,*End_2=NULL;
    Create(Head_1,End_1,arr,sizeof(arr)/sizeof(int));
    int arr_1[]= {4,3,5,6,5};
    Create(Head_2,End_2,arr_1,sizeof(arr_1)/sizeof(int));
    int Count = 3;
    List* ptr = Head_1;
    while(Count > 0){
        ptr= ptr->next;
        Count--;
    }
    End_2->next = ptr;
    //cout<<ptr->value<<"\t"<<ptr->next->value<<endl;
    ptr = End_2;
    while(ptr->next != NULL){
        ptr=ptr->next;
    }
    End_2= ptr;
    Traval(Head_1,End_1);
    Traval(Head_2,End_2);
    int Result =0;
    FindNodeValue(Head_1,End_1,Head_2,End_2,Result);
    cout<<Result<<endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值