【leetcode每日一题】23.Merge k Sorted Lists

悠悠 2022-08-04 14:42 254阅读 0赞

题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

解析:可以先归并两个链表,然后依次归并所有链表。代码如下:

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* mergeTwoLists(ListNode* l1,ListNode* l2)
  12. {
  13. if(l1==NULL)
  14. {
  15. return l2;
  16. }
  17. if(l2==NULL)
  18. {
  19. return l1;
  20. }
  21. ListNode *result,*curNode;
  22. if(l1->val<l2->val)
  23. {
  24. result=curNode=l1;
  25. l1=l1->next;
  26. }
  27. else
  28. {
  29. result=curNode=l2;
  30. l2=l2->next;
  31. }
  32. while(l1!=NULL&&l2!=NULL)
  33. {
  34. if(l1->val<l2->val)
  35. {
  36. curNode->next=l1;
  37. l1=l1->next;
  38. }
  39. else
  40. {
  41. curNode->next=l2;
  42. l2=l2->next;
  43. }
  44. curNode=curNode->next;
  45. }
  46. if(l1!=NULL)
  47. {
  48. curNode->next=l1;
  49. }
  50. if(l2!=NULL)
  51. {
  52. curNode->next=l2;
  53. }
  54. return result;
  55. }
  56. ListNode* mergeKLists(vector<ListNode*>& lists) {
  57. if(lists.size()==0)
  58. {
  59. return NULL;
  60. }
  61. ListNode *result=lists[0];
  62. for(int i=1;i<lists.size();i++)
  63. {
  64. result=mergeTwoLists(result,lists[i]);
  65. }
  66. return result;
  67. }
  68. };

发表评论

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

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

相关阅读