So führen Sie zwei geordnete verknüpfte Listen in der Sprache C zusammen: Verbinden Sie einfach alle Knoten der beiden angegebenen geordneten verknüpften Listen. Beispielsweise sind die beiden geordneten verknüpften Listen [1->2->4] und [1->3->4], und die zusammengeführte geordnete verknüpfte Liste ist [1->1->2 - >3->4->4].
Spezifische Methode:
Zwei geordnete verknüpfte Listen zu einer neuen geordneten verknüpften Liste zusammenführen und zurückgeben. Die neue verknüpfte Liste wird durch Verketten aller Knoten der beiden angegebenen verknüpften Listen gebildet.
(Empfohlenes Video-Tutorial: Java-Kurs)
Eingabe:
1->2->4, 1->3->4
Ausgabe:
1->1->2->3->4->4
Analyse: Die beiden verknüpften Listen sind geordnete verknüpfte Listen. Durchlaufen Sie also einfach die beiden verknüpften Listen, um ihre Größe zu vergleichen.
Code-Implementierung:
/** * 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; }
Teilen von Bild- und Text-Tutorials: Erste Schritte mit Java
Das obige ist der detaillierte Inhalt vonSo führen Sie zwei geordnete verknüpfte Listen in C-Sprache zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!