“Y”型链表查找交点

    xiaoxiao2023-12-14  183

    /*     一个形如"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; }

    最新回复(0)