タイトル説明:
2つのリンクリストを昇順で入力し、2つのリンクリストをマージして、新しいリンクリストのノードを昇順のままにします。
たとえば、次のように入力します。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
データ範囲:
0 <= 链表长度 <= 1000
問題解決のアイデア:
1.短いノード、head3、およびこのノードへのテールポイントを同時に初期化します。head1、head2は、2つのリンクリストのヘッドノードです
。2。ループマージ。
- head1とhead2がnullでない場合に実行します
- head1-> val> head2-> val、head3の後続ノードはhead1であり、head1は1ステップ後退します
- head2-> val> head1-> val、head3の後続ノードはhead2、head2は1ステップ後退します
- 残りの部分をマージします(ループの外はhead1であり、head2は最後までトラバースする必要があります(つまり、null)
- head1がnullではない、head3-> next = head1
- head2がnullではない、head3-> next = head2
- テールを返す->次へ
ACコード(c ++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode * head1 = l1;
ListNode * head2 = l2;
ListNode * head3 = new ListNode();
ListNode * tail = head3;
while(head1 && head2){
if(head1->val <= head2->val){
head3->next = head1;
head1=head1->next;
}else{
head3->next = head2;
head2=head2->next;
}
head3 = head3->next;
}
if(head1){
head3->next = head1;
}
if(head2){
head3->next = head2;
}
return tail->next;
}
};