在实现常常遇到头节点初始化处理问题(创建新链表时可能遇到)

可以先假设一个初始化节点,在返回时将头节点指向下一个位置

using namespace std;

struct ListNode{
    int val;
    ListNode *next;
    ListNode(int x):val(x),next(NULL){
    }
};
ListNode* creatList(string s){
    stringstream ss(s);
    vector<int> v;
    int x;
    
    while(ss>>x){
       v.push_back(x);
    } 
    ListNode *head=new ListNode(v[0]),*r=head;//必须要给头节点赋予合适的初始值
    for(int i=1;i<v.size();i++){
        x=v[i];
        ListNode *temp=new ListNode(x);
        r->next=temp;
        r=temp;
    }
    
    return head;
}
ListNode *mergeList(ListNode *h1,ListNode *h2){
    if(!h1){
        return h2;
    }
    if(!h2){
        return h1;
    }
    ListNode *head=new ListNode(-1),*r=head;
    while(h1&&h2){
        int x;
        if(h1->val<h2->val){
             x=h1->val;
             h1=h1->next;
        }
        else{
            x=h2->val;
            h2=h2->next;
        }
        
        ListNode *temp=new ListNode(x);
        r->next=temp;
        r=temp;
    }
    if(h1){
        r->next=h1;
    }
    else{
        r->next=h2;
    }
    head=head->next;//去掉初始化节点
    return head;
}
int main(){
    
    string s1,s2;
    ListNode *h1,*h2,*head;
    getline(cin, s1);
    getline(cin, s2);
    h1=creatList(s1);
    h2=creatList(s2);
    head=mergeList(h1, h2);
    while(head){
        cout<<head->val<<" ";
        head=head->next;
    }
     
    return 0;
}