LeetCode|Merge Two Sorted Lists

你的名字 2022-09-25 03:24 139阅读 0赞

【问题描述】

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

【解答1】

特殊情况:若有一个链表为空,则返回另一个链表。

  1. class Solution {
  2. public:
  3. ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
  4. if (l1 == NULL || l2 == NULL)
  5. return l1 == NULL ? l2 : l1;
  6. ListNode* nln;
  7. ListNode* nl1 = l1;
  8. ListNode* nl2 = l2;
  9. if (l1 != NULL && l2 != NULL)
  10. if (l1->val >= l2->val) {
  11. nln = l2;
  12. nl2 = l2->next;
  13. } else {
  14. nln = l1;
  15. nl1 = l1->next;
  16. }
  17. else
  18. ;
  19. ListNode* rln = nln;
  20. while (nl1 != NULL && nl2 != NULL) {
  21. if (nl1->val >= nl2->val) {
  22. nln->next = nl2;
  23. nln = nln->next;
  24. nl2 = nl2->next;
  25. } else {
  26. nln->next = nl1;
  27. nln = nln->next;
  28. nl1 = nl1->next;
  29. }
  30. }
  31. while (nl2 != NULL) {
  32. nln->next = nl2;
  33. nln = nln->next;
  34. nl2 = nl2->next;
  35. }
  36. while (nl1 != NULL) {
  37. nln->next = nl1;
  38. nln = nln->next;
  39. nl1 = nl1->next;
  40. }
  41. return rln;
  42. }
  43. };

看到这个运行时间太久啦,才击败了3.几%的人,哼,不可以,我要改进一下!

12ms

【解答2】

改进1:把头结点的赋值和其他结点放在一起,返回时返回其next即可。学习之。

改进2:将第一个while中,if-else语句中共同的一个语句,提取出来。

运行时间为8ms,击败了70几%的人,耶~不错哦~

主要时间性能提升在于改进2~为什么呢?这里还没有想明白~

  1. class Solution {
  2. public:
  3. ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
  4. if (l1 == NULL || l2 == NULL)
  5. return l1 == NULL ? l2 : l1;
  6. ListNode* nln=new ListNode(0);
  7. ListNode* nl1 = l1;
  8. ListNode* nl2 = l2;
  9. ListNode* rln = nln;
  10. while (nl1 != NULL && nl2 != NULL) {
  11. if (nl1->val >= nl2->val) {
  12. nln->next = nl2;
  13. nl2 = nl2->next;
  14. } else {
  15. nln->next = nl1;
  16. nl1 = nl1->next;
  17. }
  18. nln = nln->next;
  19. }
  20. while (nl2 != NULL) {
  21. nln->next = nl2;
  22. nln = nln->next;
  23. nl2 = nl2->next;
  24. }
  25. while (nl1 != NULL) {
  26. nln->next= nl1;
  27. nln = nln->next;
  28. nl1 = nl1->next;
  29. }
  30. return rln->next;
  31. }
  32. };

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读