剑指offer-合并两个排序的链表C++实现

剑指offer-合并两个排序的链表C++实现

原题链接

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
    
    
public:
    ListNode* Merge(ListNode* head1, ListNode* head2) {
    
    
        p = head1;
        q = head2;
        if (p == nullptr)return q;
        if (q == nullptr)return p;
        ListNode *merge_head = new ListNode(0);
       
        head = merge_head;
        while (p != nullptr && q != nullptr) {
    
    
            if (p->val <= q->val) {
    
    
                merge_head->next = p;
                p = p->next;
            } else {
    
    
                merge_head->next = q;
                q = q->next;
            }
            merge_head = merge_head->next;

        }
        if (p != nullptr) {
    
    
            merge_head->next = p;
        }
        if (q != nullptr) {
    
    
            merge_head->next = q;
        }
        return head->next;
    }

private:
    ListNode *p = nullptr;
    ListNode *q = nullptr;
    ListNode *head = nullptr;
    
};

思路:
利用双指针将单调非递减的链表合并到新链表中即可。首先判断一下p或q是否为空,为空则直接返回另一个非空链表,若两者都为空,返回一个空链表。接下来创建一个伪头结点,作为新链表的头部,然后判断q和p值的大小,将值小的结点存入新结点中即可。

猜你喜欢

转载自blog.csdn.net/qq_35140742/article/details/121403171