我已经写了下面的代码来查找链表的交叉点。有人能回顾一下吗?告诉我我能做些什么改进吗。
Algo-:
- 获取分别在LL-1和LL-2的头部初始化的两个指针p1和p1。然后让它们遍历列表,一次遍历一个节点
- 当p1到达列表的末尾时,将其重定向到LL-2的头,当p2到达列表的结尾时,将它重定向到LL-1的头
-
如果在任何点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。我也会检查平等的起点在开始循环并转到下一点之前,在循环之前不进行检查。