Farz edelim matematik ve fizik adında 2 ders var. Bizden hem matematik hem de fizik dersi alan öğrenciler isteniyor. Burada iki bağlantılı listenin kesişimini almak zorundayız.
#include<stdio.h>
#include<stdlib.h>
/* Link list node */
struct node {
int data;
struct node * next;
};
/* Function to get the counts of node in a linked list */
int getCount(struct node * head);
/* function to get the intersection point of two linked
lists head1 and head2 where head1 has d more nodes than
head2 */
int _getIntesectionNode(int d, struct node * head1, struct node * head2);
/* function to get the intersection point of two linked
lists head1 and head2 */
int getIntesectionNode(struct node * head1, struct node * head2) {
int c1 = getCount(head1);
int c2 = getCount(head2);
int d;
if (c1 > c2) {
d = c1 - c2;
return _getIntesectionNode(d, head1, head2);
} else {
d = c2 - c1;
return _getIntesectionNode(d, head2, head1);
}
}
/* function to get the intersection point of two linked
lists head1 and head2 where head1 has d more nodes than
head2 */
int _getIntesectionNode(int d, struct node * head1, struct node * head2) {
int i;
struct node * current1 = head1;
struct node * current2 = head2;
for (i = 0; i < d; i++) {
if (current1 == NULL) {
return -1;
}
current1 = current1 - > next;
}
while (current1 != NULL && current2 != NULL) {
if (current1 == current2)
return current1 - > data;
current1 = current1 - > next;
current2 = current2 - > next;
}
return -1;
}
/* Takes head pointer of the linked list and
returns the count of nodes in the list */
int getCount(struct node * head) {
struct node * current = head;
int count = 0;
while (current != NULL) {
count++;
current = current - > next;
}
return count;
}






