剑指offer37_两个链表的第一个公共节点
来源:互联网 发布:access导入sql server 编辑:程序博客网 时间:2024/06/05 20:54
/***********************************************************************************time 2016/08/26 14:37*Place Ctrip.15#.9F*author DZQ**********************************************************************************/#include<cstdio>#include<algorithm>struct Node{ int value; Node *next;};/********************************************************name get_Length_Of_List 得到一个链表的长度*parameter Node *sentinel_Node 一个链表的哨兵节点*return value int 链表的长度***************************************************************/int get_Length_Of_List(Node *sentinel_Node);/********************************************************************************************************name get_Frist_Same_Node 得到两个链表的第一个公共节点*parameter Node* sentinel_Node1,Node* sentinel_Node2 两个链表的哨兵节点*return value Node * 第一个公共的节点,如果没有找到返回NULL***********************************************************************************************************/Node *get_Frist_Same_Node(Node* sentinel_Node1,Node* sentinel_Node2);void print_List(Node* sentinel_Node){ if(sentinel_Node==NULL||sentinel_Node->next==NULL) { return; } Node* node=sentinel_Node->next; while(node!=NULL) { printf("%d ",node->value); node=node->next; } printf("\n");}Node *get_Frist_Same_Node(Node* sentinel_Node1,Node* sentinel_Node2){ if(sentinel_Node1==NULL||sentinel_Node1->next==NULL||sentinel_Node2==NULL||sentinel_Node2->next==NULL) { return NULL; } int num_Of_List1=get_Length_Of_List(sentinel_Node1); int num_Of_List2=get_Length_Of_List(sentinel_Node2); Node* frist_To_Search;//比较长的链表先走 Node* second_To_Search; int num_Of_Dif;//两个链表的差值 //分出长短 if(num_Of_List1>num_Of_List2) { frist_To_Search=sentinel_Node1; second_To_Search=sentinel_Node2; num_Of_Dif=num_Of_List1-num_Of_List2; } else { frist_To_Search=sentinel_Node2; second_To_Search=sentinel_Node1; num_Of_Dif=num_Of_List2-num_Of_List1; } Node* node1=frist_To_Search->next; Node* node2=second_To_Search->next; //比较长的链表先走,使剩下的节点与比较短的节点个数相同 for(int i=0;i<num_Of_Dif;i++) { node1=node1->next; } while(node1!=node2) { node1=node1->next; node2=node2->next; } return node1;}int get_Length_Of_List(Node *sentinel_Node){ if(sentinel_Node==NULL||sentinel_Node->next==NULL) return 0; int num_Of_List=0; Node* node=sentinel_Node->next; while(node!=NULL) { node=node->next; num_Of_List++; } return num_Of_List;}int main(){ //list1 Node* sentinel_Node1=(Node *)malloc(sizeof(Node)); sentinel_Node1->value=-1; Node* node11=(Node *)malloc(sizeof(Node)); node11->value=1; sentinel_Node1->next=node11; Node* node12=(Node *)malloc(sizeof(Node)); node12->value=2; node11->next=node12; Node* node13=(Node *)malloc(sizeof(Node)); node13->value=3; node12->next=node13; Node* node14=(Node *)malloc(sizeof(Node)); node14->value=4; node13->next=node14; Node* node15=(Node *)malloc(sizeof(Node)); node15->value=5; node14->next=node15; Node* node16=(Node *)malloc(sizeof(Node)); node16->value=6; node15->next=node16; Node* node17=(Node *)malloc(sizeof(Node)); node17->value=7; node16->next=node17; Node* node18=(Node *)malloc(sizeof(Node)); node18->value=8; node17->next=node18; Node* node19=(Node *)malloc(sizeof(Node)); node19->value=9; node18->next=node19; Node* node110=(Node *)malloc(sizeof(Node)); node110->value=10; node19->next=node110; node110->next=NULL; //list2 Node* sentinel_Node2=(Node *)malloc(sizeof(Node)); sentinel_Node2->value=-1; Node* node21=(Node *)malloc(sizeof(Node)); node21->value=21; sentinel_Node2->next=node21; Node* node22=(Node *)malloc(sizeof(Node)); node22->value=22; node21->next=node22; node22->next=node13; Node *frist_Same_Node=get_Frist_Same_Node(sentinel_Node1,sentinel_Node2); if(frist_Same_Node==NULL) { printf("No same node\n"); } else { printf("The frist same node is %d\n",frist_Same_Node->value); } return 0;}
0 0
- 剑指offer37_两个链表的第一个公共节点
- 剑指offer-两个链表的第一个公共节点
- 剑指offer37-两个链表的第一个公共节点
- 【剑指offer】两个链表的第一个公共节点
- 剑指offer-两个链表的第一个公共节点
- 【剑指offer】两个链表的第一个公共节点
- 剑指offer------两个链表的第一个公共节点
- 《剑指offer》两个链表的第一个公共节点
- 剑指offer-两个链表的第一个公共节点
- 剑指offer--两个链表的第一个公共节点
- 剑指offer 两个链表的第一个公共节点
- 两个链表的公共第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- ElasticSearch Java 增删改查
- Android 实现部分文字高亮的三种方法
- 【bzoj1088】[SCOI2005] 扫雷Mine
- USB转串口
- Iterater
- 剑指offer37_两个链表的第一个公共节点
- android的actionbar的溢出菜单默认不显示图标icon,怎样弄成微信那样可以显示icon
- ubuntu install gcc 4.1.2
- SQL 语句中 where 条件后 写上1=1 是什么意思
- JDK URLConnection示例
- 比较和排序(IComparable和IComparer以及它们的泛型实现)
- 入门两种博弈
- iOS 打包静态库放在APP上报错
- Attribute is missing the Android namespace prefix 错误小结