#21 合並排序後的兩個鏈表
阿新 • • 發佈:2017-06-19
使用 ext 小技巧 鏈表 合並 lists urn amp 冗余
思路
使用三個遊標:cur指向合並後鏈表的尾部,l1,l2分別用於遍歷兩個鏈表,較小的元素增加到合並後鏈表。
小技巧
使用冗余的頭結點可以精簡地判斷一下情形,其中一個鏈表,或兩個都為空鏈表。
從而精簡代碼。
樸素代碼
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode * head, *ptr; if (!l1 && !l2) return NULL; if (!l1 && l2) returnl2; if (l1 && !l2) return l1; if (l1->val > l2->val) { head = l2; l2 = l2->next; } else { head = l1; l1 = l1->next; } ptr = head; while (l1 && l2) { if(l1->val <= l2->val) { ptr->next = l1; l1 = l1->next; } else { ptr->next= l2; l2 = l2->next; } ptr = ptr->next; } if (l1) { ptr->next = l1; }else { ptr->next = l2; } return head; } };
優化代碼
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode dummy(0); ListNode *ptr = &dummy; while (l1 && l2) { if (l1->val <= l2->val) { ptr->next = l1; l1 = l1->next; } else { ptr->next= l2; l2 = l2->next; } ptr = ptr->next; } if (l1) { ptr->next = l1; } else { ptr->next = l2; } return dummy.next; } };
#21 合並排序後的兩個鏈表