Maison > Article > développement back-end > Comment fusionner deux listes chaînées ordonnées en langage C
Comment fusionner deux listes chaînées ordonnées en langage C : épissez simplement tous les nœuds des deux listes chaînées ordonnées spécifiées. Par exemple, les deux listes chaînées ordonnées sont [1->2->4] et [1->3->4], et la liste chaînée ordonnée fusionnée est [1->1->2 ->3->4->4].
Méthode spécifique :
Fusionner deux listes chaînées ordonnées en une nouvelle liste chaînée ordonnée et revenir. La nouvelle liste chaînée est formée en concaténant tous les nœuds des deux listes chaînées données.
(Tutoriel vidéo recommandé : cours java )
Entrée :
1->2->4, 1->3->4
Sortie :
1->1->2->3->4->4
Analyse : Les deux listes chaînées sont des listes chaînées ordonnées, il suffit donc de parcourir les deux listes chaînées afin de comparer leurs tailles.
Implémentation du code :
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if(l1==NULL){ return l2; } if(l2==NULL){ return l1; } struct ListNode *l = (struct ListNode*)malloc(sizeof(struct ListNode)); l->next = NULL; struct ListNode *list1 = l1; struct ListNode *list2 = l2; if(l1->val<l2->val){ l->val=l1->val; if(list1->next==NULL){ l->next=list2; return l; } list1=list1->next; }else{ l->val=l2->val; if(list2->next==NULL){ l->next=list1; return l; } list2=list2->next; } struct ListNode *list = l; while(list1->next!=NULL&&list2->next!=NULL){ if(list1->val<=list2->val){ struct ListNode *body = (struct ListNode *)malloc(sizeof(struct ListNode)); body->val = list1->val; body->next = NULL; list->next = body; list = list->next; list1 = list1->next; }else{ struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode)); body->val=list2->val; body->next=NULL; list->next=body; list=list->next; list2=list2->next; } } if(list1->next==NULL){ while(list2->next!=NULL){ if(list1->val<=list2->val){ list->next = list1; list = list->next; list->next=list2; return l; }else{ struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode)); body->val=list2->val; body->next=NULL; list->next=body; list=list->next; list2=list2->next; } } }else{ while(list1->next!=NULL){ if(list2->val<=list1->val){ list->next=list2; list=list->next; list->next=list1; return l; }else{ struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode)); body->val=list1->val; body->next=NULL; list->next=body; list=list->next; list1=list1->next; } } } if(list1->next==NULL&&list2->next==NULL){ if(list1->val<=list2->val){ list->next = list1; list=list->next; list->next=list2; }else{ list->next=list2; list=list->next; list->next=list1; } } return l; }
Partage de tutoriels graphiques : Premiers pas avec java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!