C言語で2つの順序付きリンクリストをマージする方法

王林
リリース: 2020-11-03 09:57:56
オリジナル
6593 人が閲覧しました

C 言語で 2 つの順序付きリンク リストをマージする方法: 指定した 2 つの順序付きリンク リストのすべてのノードを結合するだけです。たとえば、2 つの順序付きリンク リストは [1->2->4] と [1->3->4] で、マージされた順序付きリンク リストは [1->1->2] です。 - > 3 - > 4 - > 4]。

C言語で2つの順序付きリンクリストをマージする方法

具体的な方法:

2 つの順序付きリンク リストを新しい順序付きリンク リストにマージして戻ります。新しいリンク リストは、指定された 2 つのリンク リストのすべてのノードを連結することによって形成されます。

(ビデオチュートリアルの推奨:java コース)

入力:

1->2->4, 1->3->4
ログイン後にコピー

出力:

1->1->2->3->4->4
ログイン後にコピー

分析: 2 つのリンクされたリストは順序付きリンク リストなので、2 つのリンク リストを順番にたどってサイズを比較するだけです。

コードの実装:

/** * 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->valval){ 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; }
ログイン後にコピー

グラフィック チュートリアルの共有:Java の概要

以上がC言語で2つの順序付きリンクリストをマージする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!