题解 | #合并两个排序的链表#
合并两个排序的链表
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 = new ListNode(pHead1->val); ListNode* pnow = head; while(pHead1 && pHead2) { // pnow->[pHead1->val]<-head //假如 // pHead1->[1]->[3]->[5] // pHead2->[2]->[4]->[6]->[8] //如果1小于等于2 将pnow指向1 1指向下一个位置再于2比较一下 if(pHead1->val <= pHead2->val ) { pnow->next = pHead1; // pnow->[pHead1->val]<-head //假如 // | // v // pHead1->[1]->[3]->[5] // pHead2->[2]->[4]->[6]->[8] pHead1 = pHead1->next; // pnow->[pHead1->val]<-head //假如 // | // v // [1]->[3]->[5] // ^ // | // pHead1 // pHead2->[2]->[4]->[6]->[8] } //如果2小于1 将pnow指向2位置 2指向下一个位置再与1比较一下 else { pnow->next = pHead2; // [pHead1->val]<-head //假如 // | // v // [1]->[3]->[5] // | ^ // | | // v pHead1 //pHead2->[2]->[4]->[6]->[8] // pHead2 = pHead2->next; // [pHead1->val]<-head //假如 // | // v // [1]->[3]->[5] // pnow ^ // | | // v pHead1 // [2]->[4]->[6]->[8] // ^ // | // pHead2 } //pnow指向下一个位置 pnow = pnow->next; // [pHead1->val]<-head //假如 // | // v // pnow-> [1]->[3]->[5] // ^ // | // pHead1 // pHead2->[2]->[4]->[6]->[8] } //当存在有不空链表表示较大,直接连上 if(pHead1) { pnow->next = pHead1; } else { pnow->next = pHead2; } //刚开始有一个初始化的节点,记得去了 return head->next; } };