2つの順序付きチェーンテーブルを結合する(C言語)


タイトル
2つの順序付きチェーンテーブルを新しい順序付きチェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:
入力:1->2->4、1->3->4出力:1->1->2->3->4->4
解決策
1.配列順序が小さいから大きいまで並べ替えられているので、戻りポインタheadが2つのチェーンテーブルの最初の要素の小さいチェーンテーブルを指すことを確立する.2つのチェーンテーブルを結合します.2つのポインタp 1,p 2がそれぞれ2つのチェーンテーブルを指し,p 1,p 2が指す要素の値を順次比較し,小さなものを新しいチェーンテーブルに接続し,後方に移動する.p 1まで、p 2のうちの1つはNULLを指す.3.他のp 1がNULLを指していないチェーンテーブルを新しいチェーンテーブルの後ろに接続します.(特にはっきり言っていないので、コードを見た方が分かりやすい)
コード#コード#
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *p1,*p2,*q1,*q2,*p,*head;
    p1=l1;
    p2=l2;
    if(l1==NULL){
        return l2;
    }else if(l2==NULL){
        return l1;
    }
    
    if( p1->val < p2->val ){
        head=p1;
        p1=p1->next;
    }else{
        head=p2;
        p2=p2->next;
    }
        p=head;
    while(p1!=NULL && p2!=NULL){
        if(p1->val <= p2->val){
            p->next=p1;
            p=p1;
            p1=p1->next;
        }else{
            p->next=p2;
            p=p2;
            p2=p2->next;
        }
        
    }
    
    if(p1!=NULL){
        p->next=p1;
    }else{
        p->next=p2;
    }
    return head;
}