/* '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; }