1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/* Link list Node struct Node { int data; struct Node* next; }; */ /* Should return data of intersection point of two linked lists head1 and head2. If there is no intersecting point, then return -1. */ int intersectPoint(struct Node* head1, struct Node* head2) { // Your Code Here int cnt1,cnt2,cnt; Node *tmp,*prv; Node *prev1[200]; Node *prev2[200]; tmp=head1; cnt1=0; while(tmp) { prv=tmp; prev1[cnt1++]=prv; tmp=tmp->next; } tmp=head2; cnt2=0; while(tmp) { prv=tmp; prev2[cnt2++]=prv; tmp=tmp->next; } if(cnt1==0 || cnt2==0) return -1; if(prev1[cnt1-1]!=prev2[cnt2-1]) return -1; while(cnt1>0 && cnt2>0) { if(prev1[cnt1-1]!=prev2[cnt2-1]) break; cnt1-=1; cnt2-=1; } return prev1[cnt1]->data; } /* 23 83 93 829 300 344 747 569 341 423 312 811 606 802 662 731 879 306 321 737 445 627 523 466 709 417 259 925 638 63 625 601 37 453 900 380 551 469 72 974 132 882 931 934 895 661 164 200 982 900 997 960 774 814 669 191 96 927 467 85 341 91 685 377 543 937 108 446 757 180 419 888 413 349 173 660 10 337 211 343 588 207 302 714 373 322 256 820 600 722 905 940 812 941 668 706 229 128 151 985 659 921 225 423 270 397 82 631 85 973 673 851 626 386 223 300 641 43 899 714 299 191 525 591 210 582 820 337 733 156 995 5 380 770 274 777 851 256 861 143 580 885 994 206 622 568 505 614 962 755 327 260 945 203 203 507 785 22 843 869 529 190 873 909 959 499 37 809 754 249 304 334 134 649 891 755 568 747 369 530 501 47 789 798 250 991 304 34 364 498 254 893 687 126 153 997 976 189 158 730 437 461 */ |