Bağlı listeden eleman silme, Şadi Evren ŞEKER’in anlatımındaki kod:

#include <stdio.h>
#include <stdlib.h>

struct n{
 int x;
 struct n * next;
};

typedef struct n node;

void bastir( node * r){
 while (r != NULL){
  printf("%d ", r->x);
  r = r -> next;
 }
 printf("\n");
}

void ekle( node * r, int x){
 while( r -> next != NULL){
  r =r -> next;
 }
 r -> next = ( node *) malloc (sizeof (node ) );
 r -> next -> x = x;
 r -> next -> next = NULL;
 
}

node * ekleSirali ( node * r, int x){
 if( r == NULL){ //link list božsa
  r = (node *) malloc ( sizeof ( node) );
  r -> next = NULL;
  r -> x = x;
  return r;
 }
 if(r -> x > x){ 
  node * temp = ( node * ) malloc ( sizeof ( node ) );
  temp -> x = x;
  temp -> next = r;
  r = temp;
  return temp;
 }
 node * iter = r;
 while( iter -> next != NULL && iter -> next -> x < x ){
  iter = iter -> next;
 }

 node * temp = (node*)malloc(sizeof(node));
 temp->next = iter->next;
 iter->next = temp;
 temp->x = x;
 return r;
}

node * sil(node *r, int x){
 node *temp;
 node *iter = r;
 if( r->x == x){
  temp = r;
  r = r->next;
  free (temp);
  return r;
 }
 
 while ( iter->next != NULL && iter->next->x != x){
  iter = iter->next;
 }
 if ( iter->next == NULL){
  printf( "Sayi bulunamadi!\n" );
  return r;
 }
 temp = iter->next;
 iter->next = iter->next->next; 
 free (temp);
 return r;
}

int main ()
{
 node * root;
 root = NULL;
 root = ekleSirali( root, 400);
 root = ekleSirali( root, 40);
 root = ekleSirali( root, 4);
 root = ekleSirali( root, 450);
 root = ekleSirali( root, 50);
 bastir(root);
 root = sil( root, 50);
 bastir(root);
 root = sil( root, 999);
 bastir(root);
 root = sil( root, 4);
 bastir(root);
 root = sil( root, 450);
 bastir(root);  
}

Ekran çıktısı:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir