/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ #include <stdlib.h> struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) { // write code here struct ListNode *p,*q; //p=(struct ListNode*)malloc(sizeof(struct ListNode)); //先求出两个链表的长度 int i=0,j=0; int bigLen=0,smallLen=0; p=pHead1; while(p!=NULL){ i++; p=p->next; } p=pHead2; while (p!=NULL) { j++; p=p->next; } //p指向短链表头,q指向长链表头 if(i<j){ p=pHead1; q=pHead2; bigLen=j; smallLen=i; }else{ p=pHead2; q=pHead1; bigLen=i; smallLen=j; } //移动长链表,让两个指针指向的位置距离各自链表的尾部长度一致 for(;bigLen>smallLen;bigLen--){ q=q->next; } while (bigLen>=0) { //判断两个指针指向的位置是否相同 if(p==q){ return p; } p=p->next; q=q->next; } return NULL; }