题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { //任意一个链表为空就返回另一个链表 if(pHead1==nullptr) return pHead2; if(pHead2==nullptr) return pHead1; ListNode* head, *p, *q, *r; //选择pHead1,pHead2中头结点val较小的作为新链表的头结点,遍历另一个链表往里插数据 if (pHead2->val > pHead1->val) { head = pHead1; p = pHead2; } else { head = pHead2; p = pHead1; } r = head; while (p != nullptr && r->next!=nullptr) { if (p->val >= r->val && p->val <= r->next->val) {//比r小比r->next大就插进去 q = p->next; p->next = r->next; r->next = p; r = p; p = q; } else { r = r->next; } } //若r遍历完了p还没遍历完,则说明剩下的p都比r大 if(p!=nullptr) r->next = p; return head; } };