链接列表交点程序的改进

时间:2018-07-29 17:30:19

标签: c linked-list

我写了下面的代码来查找链接列表的交点。 有人可以复习一下,并告诉我是否有任何改进措施可以使它变得更好。

算法-:

  1. 获取分别在LL-1和LL-2的头初始化的两个指针p1和p1。然后让他们两个都遍历列表,一次一个节点。
  2. 当p1到达列表末尾时,将其重定向到LL-2的开头,而当p2到达列表末尾时,将其重定向到LL-1的开头。
  3. 如果在任何点p1满足p2,则p1 / p2是交点。

    int getIntesectionNode(struct Node* head1, struct Node* head2)
    {
      struct Node *start1 = head1;
      struct Node *start2 = head2;
    
      bool endFound1 = false;
      bool endFound2 = false;
    
      if( start1 == NULL || start2 == NULL)
      {
       return -1;
      }
    
      while(1)
      {
       start1 = start1->next;
       start2 = start2->next;
    
       if( start1 != start2)
       {
         if( start1 == NULL)
         {
           if (endFound1)
           {
             printf("Intersection not found !");
             break;
           }
            start1 = head2;
            endFound1 = true;
         }
    
         if( start2 == NULL)
         {
    
           if (endFound2 )
           {
              printf("Intersection not found !");
              break;
           }
           start2 = head1;
           endFound2 = true;
         }
       }
       else
       {
          printf("Intersection point found\n");
          printf("%d",start1->data);
          return start1->data;
       }
     }
     return -1;
    }
    

1 个答案:

答案 0 :(得分:1)

我认为我听不懂,但是如果您按照我的想法做,我会使用第二个循环, 并检查所有LL-1中的LL-2。我还将检查平等的起点 在开始循环并转到下一个点之前,无需检查它,直到循环为止。