fork(3) download
  1. #include <iostream>
  2. #include <unordered_set>
  3. using namespace std;
  4.  
  5. struct Node
  6. {
  7. int data;
  8. Node* next;
  9. };
  10.  
  11. int FindMergeNode_Hash(Node *headA, Node *headB);
  12.  
  13. int main()
  14. {
  15. Node *a = new Node();
  16. Node *b = new Node();
  17. Node *c = new Node();
  18. Node *d = new Node();
  19. Node *e = new Node();
  20. Node *f = new Node();
  21. Node *g = new Node();
  22.  
  23. a->data=1;
  24. a->next=b;
  25.  
  26. b->data=2;
  27. b->next=c;
  28.  
  29. c->data=3;
  30. c->next=d;
  31.  
  32. d->data=4; // Meeting Point
  33. d->next=e;
  34.  
  35. e->data=5;
  36. e->next=f;
  37.  
  38. f->data=6;
  39. f->next=g;
  40.  
  41. g->data=7;
  42. g->next=NULL;
  43.  
  44. Node *A = new Node();
  45. Node *B = new Node();
  46. Node *C = new Node();
  47.  
  48. A->data = 11;
  49. A->next = B;
  50.  
  51. B->data = 12;
  52. B->next = C;
  53.  
  54. C->data = 13;
  55. C->next = d;
  56.  
  57. int ans = FindMergeNode_Hash(A, a);
  58. cout<<"Lists meet at "<<ans<<"\n";
  59. return 0;
  60. }
  61.  
  62. int FindMergeNode_Hash(Node *headA, Node *headB)
  63. {
  64. cout<<headB->data<<endl;
  65. unordered_set<Node**> h;
  66. while(headA->next)
  67. {
  68. h.insert(&headA);
  69. headA = headA->next;
  70. }
  71. cout<<"Complete\n";
  72. cout<<headB->data; // Stuck here in an infite loop
  73. while(headB->next)
  74. {
  75. unordered_set <Node**>::iterator got = h.find (&headB);
  76. if ( got != h.end() )
  77. return headB->data;
  78. }
  79. return -1;
  80. }
Time limit exceeded #stdin #stdout 5s 4312KB
stdin
Standard input is empty
stdout
1