leetcode21. Merge Two Sorted Lists(链表)

题目
链表

归并链表, 要注意一下链表的初始化问题, 尤其对于指针要谨慎处理, 很容易空指针异常

/**
 * 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) {
        //判断是否存在空链表
        if(!l1) return l2;
        if(!l2) return l1;
        
        ListNode *l3 = NULL;
        if(l1->val <= l2->val)  //不必考虑头节点数据, 使用l1&l2初始化l3
            l3 = l1, l1 = l1->next;
        else
            l3 = l2, l2 = l2->next;
        
        ListNode *p = l3;
        
        while(l1 && l2){
            if(l1->val <= l2->val)
                p->next = l1, l1 = l1->next; //防止空链
            else
                p->next = l2, l2 = l2->next;
            p = p->next;
        }
        
        p->next = (l1?l1:l2); //剩余节点直接接在后面
    
        return l3;
    }
};

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/84954288