2016-04-07 28 views
0

Bağlantılı bir liste verilirse, dizinlenmiş düğümlerin bile birlikte düzenlenmesi ve çift indeksli düğümlerin bile dizinlenmiş düğümlerden sonra birlikte düzenlenmesi gibi işlemeler yapmamız gerekir.Liste düğümlerini birleştirin

bağlantılı listeye 1-->2-->3-->4-->5-->6 takiben gerektiği çıkışı: Böyle listenin head bir pointer atamanız gerekir

typedef struct node { 
    int val; 
    struct node * next; 
} node_t; 

İlk:

2-->4-->6-->1-->3-->5 
+1

Kod için mi arıyorsunuz? Girdiğiniz çabaları açıklayabilir misiniz? En kolay yol, tüm çift numaralı düğümleri öne taşır. Temel bağlantılı liste işlemleri ile bunu yapabilmeniz gerekir. – Prabhu

cevap

0

en bu liste diyelim:

node_t * head = NULL; 
head = malloc(sizeof(node_t)); 

for döngü:

for(int i = 0; i<size_of_your_list; i= i+2){ 
      if(i % 2 == 0){ 
       printf("%d",head->val); 
      } 
      head = head->next; 
    } 
    for(int i =1 ; i<size_of_your_list; i=i+2){ 
      if(i % 2 == 1){ 
       printf("%d",head->val); 
      } 
      head = head->next; 
    } 

Bu kodun yalnızca yazdırıldığını unutmayın. Listeni değiştirmez.

+0

, printf ("% d", head-> val); "işe yaramazsa: printf ("% p ", head-> val);' – Maria

+0

Aslında yazdırmak yerine listeyi değiştirmek zorundayız. . Ve kodunuzu kullanarak, düğüm ile ilişkili dizinin nerede olduğunu anlayamıyorum, yani yaptığımız gibi% 2 == 1 veya i% 2 == 0, yani i değerinin ne olduğunu nasıl anlarız? Bu düğüm için ya da zaten her düğüm ile ilişkili bir dizin alanı olduğunu varsayalım. – radhika

+0

Başlıklar için teşekkürler! Kodumu biraz düzenledim. İlk düğümün 'i = 0', ikincisi 'i = 1' e.t.c'ye karşılık geldiğini varsayabilirsiniz. – Maria

0
node_t *cursor = input_list; 
while(cursor) { 
    if(cursor->value % 2 == 0) 
     append(output_list, cursor->value) 
    cursor = cursor->next; 
} 

cursor = input_list; 
while(cursor) { 
    if(cursor->value % 2 == 1) 
     append(output_list, cursor->value) 
    cursor = cursor->next; 
}