方法:迭代—-分情况比较多,官方方法会比较简单

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode() : val(0), next(nullptr) {}
    7. * ListNode(int x) : val(x), next(nullptr) {}
    8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
    9. * };
    10. */
    11. class Solution {
    12. public:
    13. ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
    14. if(!list1&&!list2){
    15. return NULL;
    16. }
    17. ListNode* head1=list1;
    18. ListNode* head2=list2;
    19. ListNode* result=NULL;
    20. ListNode* result1;
    21. while(list1&&list2){
    22. int n1=list1->val;
    23. int n2=list2->val;
    24. if(n1<n2){
    25. if(result==NULL){
    26. result=new ListNode(n1);
    27. result1=result;
    28. list1=list1->next;
    29. }else{
    30. result->next=new ListNode(n1);
    31. result=result->next;
    32. list1=list1->next;
    33. }
    34. }else{
    35. if(result==NULL){
    36. result=new ListNode(n2);
    37. result1=result;
    38. list2=list2->next;
    39. }else{
    40. result->next=new ListNode(n2);
    41. result=result->next;
    42. list2=list2->next;
    43. }
    44. }
    45. }
    46. if(list1&&!list2){
    47. if(result==NULL){
    48. return list1;
    49. }
    50. result->next=list1;
    51. }
    52. if(!list1&&list2){
    53. if(result==NULL){
    54. return list2;
    55. }
    56. result->next=list2;
    57. }
    58. return result1;
    59. }
    60. };