fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct SinglyLinkedListNode {
  5. int data;
  6. SinglyLinkedListNode* next;
  7.  
  8. SinglyLinkedListNode(int val) {
  9. data = val;
  10. next = nullptr;
  11. }
  12. };
  13.  
  14. SinglyLinkedListNode* mergeLists(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
  15. if (!head1) return head2;
  16. if (!head2) return head1;
  17.  
  18. SinglyLinkedListNode* mergedHead = nullptr;
  19.  
  20. if (head1->data < head2->data) {
  21. mergedHead = head1;
  22. head1 = head1->next;
  23. } else {
  24. mergedHead = head2;
  25. head2 = head2->next;
  26. }
  27.  
  28. SinglyLinkedListNode* current = mergedHead;
  29.  
  30. while (head1 && head2) {
  31. if (head1->data < head2->data) {
  32. current->next = head1;
  33. head1 = head1->next;
  34. } else {
  35. current->next = head2;
  36. head2 = head2->next;
  37. }
  38. current = current->next;
  39. }
  40.  
  41. if (head1) current->next = head1;
  42. if (head2) current->next = head2;
  43.  
  44. return mergedHead;
  45. }
  46.  
  47. void printList(SinglyLinkedListNode* head) {
  48. while (head) {
  49. cout << head->data << " ";
  50. head = head->next;
  51. }
  52. cout << endl;
  53. }
  54.  
  55. int main() {
  56. SinglyLinkedListNode* head1 = new SinglyLinkedListNode(1);
  57. head1->next = new SinglyLinkedListNode(3);
  58. head1->next->next = new SinglyLinkedListNode(5);
  59.  
  60. SinglyLinkedListNode* head2 = new SinglyLinkedListNode(2);
  61. head2->next = new SinglyLinkedListNode(4);
  62. head2->next->next = new SinglyLinkedListNode(6);
  63.  
  64. SinglyLinkedListNode* merged = mergeLists(head1, head2);
  65. printList(merged);
  66.  
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
1 2 3 4 5 6