Home / C ve C++ / C Programlama – Nested List (Bağlantılı Liste)

C Programlama – Nested List (Bağlantılı Liste)

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;
}

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir