合并两个有序数列。属于基础的数据结构问题,核心在于对链表的操作。
代码如下:
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 ListNode* head1 = NULL; 13 ListNode* head2 = NULL; 14 ListNode* tmp = NULL; 15 if(l1 == NULL) 16 { 17 return l2; 18 } 19 else if(l2 == NULL) 20 { 21 return l1; 22 } 23 else if(l1->val > l2->val) 24 { 25 tmp = l2; 26 head1 = l1; 27 head2 = l2->next; 28 } 29 else 30 { 31 tmp = l1; 32 head1 = l1->next; 33 head2 = l2; 34 } 35 ListNode* node = tmp; 36 while(true) 37 { 38 if(head1 == NULL) 39 { 40 node->next = head2; 41 break; 42 } 43 if(head2 == NULL) 44 { 45 node->next = head1; 46 break; 47 } 48 if(head1->val > head2->val) 49 { 50 node->next = head2; 51 head2 = head2->next; 52 } 53 else 54 { 55 node->next = head1; 56 head1 = head1->next; 57 } 58 node = node->next; 59 } 60 return tmp; 61 } 62 };