c-链表交叉点程序的改进



我已经写了下面的代码来查找链表的交叉点。有人能回顾一下吗?告诉我我能做些什么改进吗。

Algo-:

  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 foundn");
    printf("%d",start1->data);
    return start1->data;
    }
    }
    return -1;
    }
    

我想我不明白,但如果你正在做我想做的事情,我会使用第二个循环,并在每个LL-2之前检查所有LL-1。我也会检查平等的起点在开始循环并转到下一点之前,在循环之前不进行检查。

相关内容

  • 没有找到相关文章

最新更新