/*
'6'型链表
描述,有一个形式为'6'型的链表 求解交点的数值
*/
#include<iostream>
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 != NULL){
cout<<ptr->value<<" ";
ptr = ptr->next;
}
cout<<endl;
}
/*获取单向链表长度*/
void Length(List* &Head,List* &End,int &length)
{
if(Head == NULL || End == NULL)
length =0;
return ;
List* ptr = Head;
length =0;
while(ptr != NULL){
length++;
ptr= ptr->next;
}
}
/*查找交点数值*/
void FindNodeValue(List* &Head,int &Result)
{
if(Head == NULL) return ;
List* ptr_1 = Head->next;
List* ptr_2 = Head->next->next;
while(ptr_1 != ptr_2){
ptr_1 = ptr_1->next;
ptr_2 = ptr_2->next->next;
}
int count = 1;
ptr_2 = ptr_2->next;
while(ptr_1 != ptr_2){
count++;
ptr_2 = ptr_2->next;
}
cout<<count<<endl;
ptr_1 = Head;
ptr_2 = Head;
while(count > 0){
ptr_1 = ptr_1->next;
count--;
}
cout<<ptr_1->value<<endl;
while(ptr_1 != ptr_2){
ptr_1= ptr_1->next;
ptr_2 = ptr_2->next;
}
Result = ptr_1->value;
}
int main()
{
int arr[] = {4,3,5,6,3,7,4,5,2,6};
List *Head= NULL ,*End = NULL;
Create(Head,End,arr,sizeof(arr)/sizeof(int));
int count = 4;
List* ptr = Head;
while(count > 0){
ptr = ptr->next;
count--;
}
cout<<ptr->value<<endl;
End->next = ptr;
int Result =0;
FindNodeValue(Head,Result);
cout<<Result<<endl;
system("pause");
return 0;
}