合并两个已排序的链表,考到烂得不能再烂的经典题,但是很多人写这段代码会有这样或那样的问题
这里我给出了我的C++算法实现
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 if(l1 && !l2) return l1; 13 if(l2 && !l1) return l2; 14 if( !l2 && !l1) return NULL; //保证所有列表不为空 15 ListNode* t1 = l1; 16 ListNode* t2 = l2; 17 ListNode* t = NULL; 18 if(t1->val < t2->val){ //确定表头t是l1还是l2 19 t = t1; 20 t1 = t1->next; 21 } 22 else{ 23 t = t2; 24 t2 = t2->next; 25 } 26 for(;t1&&t2; t = t->next){//确定表头t的下一个元素 27 if(t1->val < t2->val){ 28 t->next = t1; 29 t1 = t1->next; 30 } 31 else{ 32 t->next = t2; 33 t2 = t2->next; 34 } 35 } 36 if(t1){//t1不为空,将l1剩余部分插入到t后 37 t->next = t1; 38 } 39 if(t2){//t2不为空,将l2剩余部分插入到t后 40 t->next = t2; 41 } 42 if(l1->val < l2->val) return l1; 43 else return l2;//确定表头 44 } 45 };